【发布时间】:2015-05-21 23:55:11
【问题描述】:
int a[5]={1,2,3,5,6};
int *apnt= a;
while (*apnt)
{
printf("The no is %d\n",*apnt);
apnt++;
}
与字符串不同,我知道数组末尾没有空元素。但是,无论我刷新内存多少次或重新启动 xcode,我的代码总是给出以下输出。这里发生了什么?有人可以给我一个见解吗?
输出是:
The no is 1
The no is 2
The no is 3
The no is 5
The no is 6
The no is 32767
The no is 144723190
The no is 1694538263
The no is 1606416704
The no is 32767
The no is -1982110263
The no is 32767
【问题讨论】:
-
你有未定义的行为。所以呢?
-
如果您知道最后没有添加 null,您为什么期望
while (*apnt)为您做任何有用的事情? -
您已经描述了您观察到的情况,但没有描述这与您的预期有何不同。由于输出没有任何“错误”,我们需要知道您的期望,以便纠正您的任何误解。
-
我希望你意识到通过使用 while (*apnt) 你指向数组的第一个元素,即 1;这具有使while循环成为无限循环的效果。尝试删除尊重运算符。
-
@bames53:他说“我的代码总是给出以下输出,无论我刷新内存多少次,或者重新启动 xcode”。换句话说,他预计“错误”输出(在 1 2 3 5 6 之后)每次都会改变,因为这些内存地址的内容应该是随机的。相反,它总是一样的。为什么?