元素及其后的指针算术。这段代码有什么问题?

时间:2013-11-01 09:26:33

标签: c pointers

请问,此代码有什么问题。它应该打印到y [4]然后突破while循环,但它打印到y [12]然后打破;我认为y [5]到y [12]之间的打印是错误的。它来自一个网站,作为一个例子,指针算法仅限于数组元素和超出一个元素。

#include <stdio.h>

int main()
{
   int i = 0;
   int x[5] = {0, 1, 2, 3, 4};
   int y[5];
   int *ptr = x;
   while (&y[i] != (ptr+5)){
        y[i] = x[i];
        printf("Value of y[%d] is : %d\n", i, y[i]);
        i++;
   }

   return 0 ;
}

3 个答案:

答案 0 :(得分:2)

您的情况(&y[i] != (ptr+5)是错误的。 Y是一个指向内存中与x完全不同的区域的数组。所以条件将保持正确。

答案 1 :(得分:1)

条件&y[i] != (ptr+5)在这里没有意义。为什么要将yptr进行比较?它们指向不同的内存位置。它们永远不会是相同的,因为它们指向两个不同的位置。你只需要检查一下:

while (i<5)

请参阅完整代码here

答案 2 :(得分:1)

无法保证数组y将放置在与数组x相关的特定位置。所以你正在利用的是特定于编译器的行为,它可能会根据使用的编译器,编译器版本甚至编译器标志而改变。