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

时间:2018-01-17 22:59:33

标签: c++ arrays pointers pointer-arithmetic

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

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

string *pArray = Array;

pArray = pArray + 1;

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

输出为“两个”

有人可以向我解释这个的运作方式吗?为什么+1会将指针的位置更改为数组中“two”的位置?我希望将+1连接到字符串指针的末尾,这样我最终会得到类似'0x61feb01'的内容。

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

为什么在这里添加一个不同的字符串?

感谢。

1 个答案:

答案 0 :(得分:1)

我想当你添加&#34; 1&#34;对你的指针,这&#34; 1&#34;在添加过程中不被视为整数。请注意,指针是一个地址,现在,当您向指针添加1时,它变为:当前的地址+字符串类型的一个完整大小。因此,例如,如果您的字符串类型需要8个字节,那么您将在内存中向前移动8个字节而不是1个字节!

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

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