c - 指向指针的指针得到奇怪的输出
问题描述
我写了一个示例程序来测试指针。但我对输出感到困惑。代码看起来像这样
#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;
}
我希望*(array[i])
每个 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,循环就会中断)。