pArray = pArray + 1;有人可以向我解释这如何在 C++ 中增加数组吗?

pArray = pArray + 1; Can someone explain to me how this increments the array in C++?

我一直在学习如何将指针与数组一起使用。如果我要写这个简单的代码:

string Array[3] = {"one", "two", "three"};

string *pArray = Array;

pArray = pArray + 1;

std::cout << *pArray << std::endl;

输出为'two'

谁能给我解释一下这是怎么回事?为什么 +1 会将指针的位置更改为 "two" 在数组中的位置?我希望 +1 连接到字符串指针的末尾,所以我最终会得到类似 '0x61feb01' 的东西。

编译器如何知道要递增数组而不只是在指针字符串内存位置的末尾加 1?

为什么在此处将 int 添加到字符串不同?

谢谢。

我想当你把“1”加到你的指针上时,这个“1”在加法的过程中并没有被当作一个整数。请注意,指针是一个地址,现在,当您向指针添加 1 时,它会变成:当前地址 + 字符串类型的一个完整大小。因此,例如,如果您的字符串类型占用 8 个字节,您将在内存中向前移动 8 个字节而不是 1 个字节!

至于为什么打印"two"你应该知道数组元素在内存中保存在连续的字节组中,因此当你添加到一个元素的地址时你可以得到其他元素。数组名只是指针本身,只是它们是固定指针(您不能更改它们的地址)。例如。在 (int myArr[10]) 中,名称 "myArr" 是一个指针,指向 ram 中包含第一个元素的第一部分(具有该地址),然后像您所做的那样使用指针算法在您的上述示例中,您也可以访问其余元素。

作为结束语,这两个在这个示例数组中是相等的:(myArr[i]==*(myArr+i)),如果你在这里输入 0 而不是 i,你会得到 (myArr[0] ==*myArr) 这正是我之前所说的。希望对你有帮助。