我编写了一个示例程序来测试指针。但是我对输出感到困惑。代码看起来像这样
#include<stdio.h>
#include<stdlib.h>
int main(void){
int **array;
int *num;
array=malloc(sizeof(int *)*10);
int i;
for(i=0;i<10;i++){
num=&i;
printf("&i=%d num=%d\n",&i,num);
array[i]=num;
}
for(i=0;i<10;i++){
printf("array[%d]=%d *(array[%d])=%d\n",i,array[i],i,*(array[i]));
}
return 0;
}
我希望每个i的*(array[i])
输出为9。但是我得到的数字是0到9。我不知道为什么。有人可以帮忙吗?谢谢!
由于您在第二个循环中将i
用作索引,因此该行为偏离了您的预期。当您经历第二个循环时,i
再次从0-9变为。因此,由于array
中的每个条目都指向i
,因此将打印0-9。
如果您改为这样做,则>
int j; for (j = 0; j < 10; j++) { printf("array[%d]=%d *(array[%d])=%d\n", j, array[j], j, *(array[j])); }
您将获得预期的输出(它将是10,而不是9,因为一旦
i
达到10,循环就会中断。