指针指向奇怪的输出

问题描述 投票:0回答:1

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

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

c
1个回答
0
投票

由于您在第二个循环中将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,循环就会中断。

© www.soinside.com 2019 - 2024. All rights reserved.