0

请问,这段代码有什么问题。它应该打印到 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 ;
}
4

3 回答 3

2

你的条件(&y[i] != (ptr+5)不对。Y 是一个数组,它指向与 x 完全不同的内存区域。所以条件将保持真实。

于 2013-11-01T09:29:30.370 回答
1

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

while (i<5)

在此处查看完整代码。

于 2013-11-01T09:29:09.033 回答
1

无法保证数组y将放置在相对于数组的特定位置x。因此,您正在利用的是特定于编译器的行为,这可能会根据使用的编译器、编译器版本甚至编译器标志而改变。

于 2013-11-01T09:30:53.263 回答