【问题标题】:Declaring int array and changing its elements in C inside a for loop [closed]在 for 循环中声明 int 数组并在 C 中更改其元素 [关闭]
【发布时间】:2020-06-12 05:01:00
【问题描述】:

我是 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

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

【问题讨论】:

  • 一些愚蠢的错误。 &amp;available -> available。启用并读取编译器警告。

标签: c printf address-operator


【解决方案1】:
   printf("%d\n",&available[o]);

这里是打印地址,因为&amp;给出了以下值的地址,改成:

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

打印数组中的值。

【讨论】:

  • &amp; 是否总是输出数组元素的地址,不管它是 int 还是 char?
  • &amp; 给出了下面的地址。
【解决方案2】:
printf("%d\n",&available[o]);

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

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


由于您还为需要int 类型参数的%d 转换说明符提供了错误类型的参数(int *),因此程序调用undefined behavior

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

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


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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2021-11-02
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多