在 for 循环中声明 int 数组并更改其在 C 中的元素
Declaring int array and changing its elements in C inside a for loop
我是 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
我是不是漏掉了一个关键部分,犯了一些愚蠢的错误?。任何帮助将不胜感激。
printf("%d\n",&available[o]);
这里打印的是地址,因为&
给出了下面值的地址,改成:
printf("%d\n",available[o]);
打印数组中的值。
printf("%d\n",&available[o]);
&available[o]
是指向available[o]
的内存地址的指针。
您需要省略 &
运算符以获得 available[o]
的值,而不是其地址。
由于您还为需要 int
类型参数的 %d
转换说明符提供了错误类型的参数 (int *
),程序调用 undefined behavior :
"d, i The int
argument is converted to signed decimal in the style[-]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is1.The result of converting a zero value with a precision of zero is no characters."
Source: C18, 7.21.6.1/8 - "The fprintf function"
"If a conversion specification is invalid, the behavior is undefined. 288) If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined."
"288) See "future library directions" (7.31.11)."
Source: C18, 7.21.6.1/9 - "The fprintf function"
我是 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
我是不是漏掉了一个关键部分,犯了一些愚蠢的错误?。任何帮助将不胜感激。
printf("%d\n",&available[o]);
这里打印的是地址,因为&
给出了下面值的地址,改成:
printf("%d\n",available[o]);
打印数组中的值。
printf("%d\n",&available[o]);
&available[o]
是指向available[o]
的内存地址的指针。
您需要省略 &
运算符以获得 available[o]
的值,而不是其地址。
由于您还为需要 int
类型参数的 %d
转换说明符提供了错误类型的参数 (int *
),程序调用 undefined behavior :
"d, i The
int
argument is converted to signed decimal in the style[-]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is1.The result of converting a zero value with a precision of zero is no characters."Source: C18, 7.21.6.1/8 - "The fprintf function"
"If a conversion specification is invalid, the behavior is undefined. 288) If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined."
"288) See "future library directions" (7.31.11)."
Source: C18, 7.21.6.1/9 - "The fprintf function"