无法递增char*指针

Unable to increment char* pointer

本文关键字:指针 char      更新时间:2023-10-16

我对指针有点生疏,所以请耐心等待。我已经声明了一个字符数组和一个按以下方式设置的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的地址