无法递增char*指针
Unable to increment char* pointer
我对指针有点生疏,所以请耐心等待。我已经声明了一个字符数组和一个按以下方式设置的char*指针:
char* memPointer = &mem_arr[0];
当我运行程序时,我的起始地址似乎是6E2D200C(由于某种原因,这个地址总是一样的。我不确定这是对是错。如果我做错了什么,请告诉我)然后,当用户请求一些内存时,我会尝试增加指针并打印出新地址。但地址与上述相同。以下是我尝试过但没有成功的东西:
//*(memPointer += actualSize); //no change
//memPointer += actualSize; //no change
//*memPointer += actualSize;// no change
&memPointer += actualSize; //no change
actualSize是一个int。如果我需要提供任何其他信息,请告诉我。提前谢谢!
在您的注释中,您指出您的代码符合以下留置权:
char mem_arr[] = "hello world";
char* memPointer = &mem_arr[0];
memPointer += actualSize;
printf("memPointer = %pn", &memPointer);
这条线路
char* memPointer = &mem_arr[0];
says:设类型为char*
的变量memPointer
,并使其包含mem_arr的第一个元素的地址。此行之后,变量memPointer
包含mem_arr[0]
的地址。
&memPointer
扩展到memPointer的地址-,而不是memPointer包含的地址。memPointer是一个命名变量,表示&memPointer
的计算结果是该变量的地址(内存中的位置),而不是其值。
memPointer += actualSize;
printf("&mem_arr[0] = %p, memPointer = %pn", &mem_arr[0], memPointer);
将memPointer设置为指向mem_arr的第actualSize个元素,就像您的代码试图做的那样。
指针的地址不会改变,但如果开始递增,指针可能会指向其他东西:
char* x = "test";
// *x is now 't'
x++;
// *x is now 'e'
除非使用指向指针的指针(如char** x
),否则没有任何有意义的方法来操作指针本身的地址。
你说"当用户请求一些内存时",并暗示你必须操作指针,这似乎是基于有缺陷的假设。如果你使用C风格,你可以使用realloc()
,在那里你可以得到一个指向新分配的指针。如果你正确地使用C++,你需要new
一些新内存,复制内容,delete
旧的分配。
也许您对获取mempointer的地址而不是mempointer指向的地址感到困惑
这段代码显示了每当我增加指针或给他一个新的内存地址时,my_pointer指向的地址是如何变化的
int mem_arr[256];
int * my_pointer = &mem_arr[0];
// let's give some values to the array just
// for fun
for(int i = 0; i < 256; i++)
{
mem_arr[i] = 10 + (i * 10);
}
// print original value & address
std::cout << "Value 1: " << *my_pointer << " Address 1: " << my_pointer << std::endl;
// increase pointer (+4 bytes)
my_pointer++;
// print current value & address
std::cout << "Value 2: " << *my_pointer << " Address 2: " << my_pointer << std::endl;
// let's seek into the 8th element
// of the array
my_pointer = &mem_arr[8];
// and print current value & address once again
std::cout << "Value 3: " << *my_pointer << " Address 3: " << my_pointer << std::endl;
getchar();
my_pointer
自身返回my_pointer所指向的地址,而
&my_pointer
返回存储指针my_pointer
的地址
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 使用指针初始化 char 数组或字符串 C++
- 为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
- 构造函数 (C++) 中的 char 指针参数存在问题
- 将 char 指针传递给接受对 char 数组的引用的函数
- 分配值时,C++ char* 指针上的前递增与后递增
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- char* 除了作为C++中的指针之外,还有其他功能吗?
- 为什么当我尝试将char输入到int时,文件指针会卡住
- char指针或char变量的默认值是多少
- char p[0]表示自动分配的缓冲区还是安全指针
- 为什么为char指针分配内存不会截断char序列
- 通过指针使用C++还原char数组时出现问题
- 愚蠢的问题:strcat和char指针
- C++17:unique_ptr<char[]> 和 shared_ptr<char[] 之间的指针存储差异>
- 为什么要使用引用来获取 *char?当我们使用指针时,不使用引用不是更好吗?
- 如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?
- 家庭工作:将一个文件读取到指向指针char(char**)的指针中
- 从Cocos2dx的指针char向量写入sqlite文件
- 将char复制到struct指针char