首页 > 解决方案 > 指向指针的指针得到奇怪的输出

问题描述

我写了一个示例程序来测试指针。但我对输出感到困惑。代码看起来像这样

#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 的数字。我不知道为什么。有人可以帮忙吗?谢谢!

标签: c

解决方案


该行为偏离了您的预期,因为您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,循环就会中断)。


推荐阅读