【发布时间】:2016-02-14 12:07:11
【问题描述】:
我是一个新手,试图围绕指针的概念来思考。到目前为止,它一直进展顺利,除非我尝试使用 for 循环来处理数组。我没有以正常方式索引数组,而是使用指针。这就是我注意到一些我无法理解的特殊性的地方。
所以,例如。假设我想打印 numArray 的前四个值:
int numArray = [1, 5, 10, 15, 20]
现在有了指针,我的方法是这样的:
int *ptr = numArray;
for (ptr; *ptr < *(ptr + 4); ptr++)
{
std::cout << *ptr << std::endl;
}
这不起作用,尽管我认为 *(ptr + 4) 与 numArray[4] 相同。
但是,如果我对停止条件的处理略有不同:
int *ptr = numArray;
int end = *(ptr + 4);
for (ptr; *ptr < end; ptr++)
{
std::cout << *ptr << std::endl;
}
然后它突然给了我我想要的东西,尽管代码并没有太大的不同。
那么为什么会这样呢?我觉得答案可能很明显,但我没有掌握它。为什么将 *(ptr + 4) 放在 for 循环中会导致如此大的差异?为什么指针会这样表现?
【问题讨论】:
-
您正在递增
ptr,因此ptr和ptr + 4都是移动目标。