4

我是 C 新手,目前正在学习数组。我有这个代码:

#include <stdio.h>
int main()
{   
    int available[6];
    for(int o=1; o<=3; o++){
        available[o]=20;
        printf("%d\n",&available[o]);
    }
    return 0;
}

应该输出(在我的理解中):

20
20
20

现在的问题是它输出:

2293300
2293304
2293308

我是否错过了一个关键部分并犯了一些愚蠢的错误?任何帮助将不胜感激。

4

2 回答 2

5
   printf("%d\n",&available[o]);

在这里打印地址,因为&给出了以下值的地址,将其更改为:

   printf("%d\n",available[o]);

打印数组内的值。

于 2020-06-12T05:03:59.537 回答
1
printf("%d\n",&available[o]);

&available[o]是指向内存地址的指针available[o]

您需要省略&运算符以获得 的值available[o],而不是其地址。


由于您还为需要类型参数的转换说明符提供了错误类型 ( int *)的参数,因此程序会调用未定义的行为%dint

" d, iint参数转换为样式 [-]dddd 中的有符号十进制。精度指定出现的最小位数;如果要转换的值可以用更少的位数表示,则用前导零扩展。默认精度为1。零精度零值转换结果为无字符。 "

来源:C18, 7.21.6.1/8 - “fprintf 函数”


“如果转换规范无效,则行为未定义。288)如果任何参数不是相应转换规范的正确类型,则行为未定义。”

“288)见“未来图书馆方向”(7.31.11)。

来源:C18, 7.21.6.1/9 - “fprintf 函数”

于 2020-06-12T07:24:22.540 回答