关于数组的问题
为什么a的值会是0呢?a应该是没有被初始化到,应该是一个随机的数才对啊?#include <stdio.h>
int main(void)
{
int a = {1, 3, 5};
printf("%d\n", a);
return 0;
} 本帖最后由 一点点儿 于 2022-8-19 17:55 编辑
如果数组初始化式比数组短,那么数组中剩余的元素赋值为0
int a = {1, 3, 5}; 这句初始化,将a、a赋值为0 int a; //此时五个数都是随机数
int a = {0}; //此时五个胡都被初始化为0
int a = {1, 2, 3}; //此时a数组的值是{1, 2, 3, 0, 0} 本帖最后由 jackz007 于 2022-8-19 18:19 编辑
用一个循环把它们的数值都打印出来一看不就一目了然了。
#include <stdio.h>
int main(void)
{
int i , a = {1, 3, 5} ;
printf("%d" , a) ;
for(i = 1 ; i <5 ; i ++) printf(",%d", a) ;
printf("\n") ;
}
这是 main() 函数对应的反汇编代码
00401350/$55 push ebp
00401351|.89E5 mov ebp, esp
00401353|.83E4 F0 and esp, FFFFFFF0
00401356|.83EC 30 sub esp, 30
00401359|.E8 52060000 call 004019B0
0040135E|.C74424 18 00000000 mov dword ptr , 0 ; | <--- a = 0
00401366|.C74424 1C 00000000 mov dword ptr , 0 ; | <--- a = 0
0040136E|.C74424 20 00000000 mov dword ptr , 0 ; | <--- a = 0
00401376|.C74424 24 00000000 mov dword ptr , 0 ; | <--- a = 0
0040137E|.C74424 28 00000000 mov dword ptr , 0 ; | <--- a = 0
00401386|.C74424 18 01000000 mov dword ptr , 1 ; | <--- a = 1
0040138E|.C74424 1C 03000000 mov dword ptr , 3 ; | <--- a = 3
00401396|.C74424 20 05000000 mov dword ptr , 5 ; | <--- a = 5
0040139E|.8B4424 18 mov eax, dword ptr ; |
004013A2|.894424 04 mov dword ptr , eax ; |
004013A6|.C70424 24304000 mov dword ptr , 00403024 ; |ASCII "%d"
004013AD|.E8 6E080000 call <jmp.&msvcrt.printf> ; \printf
004013B2|.C74424 2C 01000000 mov dword ptr , 1
004013BA|>837C24 2C 04 /cmp dword ptr , 4 ; |
004013BF|.7F 1F |jg short 004013E0 ; |
004013C1|.8B4424 2C |mov eax, dword ptr ; |
004013C5|.8B4484 18 |mov eax, dword ptr ; |
004013C9|.894424 04 |mov dword ptr , eax ; |
004013CD|.C70424 27304000 |mov dword ptr , 00403027 ; |ASCII ",%d"
004013D4|.E8 47080000 |call <jmp.&msvcrt.printf> ; \printf
004013D9|.834424 2C 01 |add dword ptr , 1
004013DE|.^ EB DA \jmp short 004013BA
004013E0|>C70424 0A000000 mov dword ptr , 0A ; |
004013E7|.E8 3C080000 call <jmp.&msvcrt.putchar> ; \putchar
004013EC|.B8 00000000 mov eax, 0
004013F1|.C9 leave
004013F2\.C3 retn
从中可以看出,程序先把 a[] 的所有 5 个元素初始化为 0 值,然后,再分别为 a、a、a 赋值为 1、3、5,所以,a 的值一定是 0。 你既然知道它没有被初始化了 , 那看它的值就感觉没什么意义
int a; //a随机
int a={};//a是0
int a={1};//a是0,a是1
望采纳{:10_257:}
页:
[1]