请问,此代码有什么问题。它应该打印到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 ;
}
答案 0 :(得分:2)
您的情况(&y[i] != (ptr+5)
是错误的。 Y是一个指向内存中与x完全不同的区域的数组。所以条件将保持正确。
答案 1 :(得分:1)
条件&y[i] != (ptr+5)
在这里没有意义。为什么要将y
与ptr
进行比较?它们指向不同的内存位置。它们永远不会是相同的,因为它们指向两个不同的位置。你只需要检查一下:
while (i<5)
请参阅完整代码here。
答案 2 :(得分:1)
无法保证数组y
将放置在与数组x
相关的特定位置。所以你正在利用的是特定于编译器的行为,它可能会根据使用的编译器,编译器版本甚至编译器标志而改变。