1613551 发表于 2022-8-19 17:48:08

关于数组的问题

为什么a的值会是0呢?a应该是没有被初始化到,应该是一个随机的数才对啊?

#include <stdio.h>
int main(void)
{
int a = {1, 3, 5};
printf("%d\n", a);
return 0;
}

一点点儿 发表于 2022-8-19 17:53:10

本帖最后由 一点点儿 于 2022-8-19 17:55 编辑

如果数组初始化式比数组短,那么数组中剩余的元素赋值为0

int a = {1, 3, 5}; 这句初始化,将a、a赋值为0

tommyyu 发表于 2022-8-19 17:58:07

int a; //此时五个数都是随机数
int a = {0}; //此时五个胡都被初始化为0
int a = {1, 2, 3}; //此时a数组的值是{1, 2, 3, 0, 0}

jackz007 发表于 2022-8-19 17:58:16

本帖最后由 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。

柿子饼同学 发表于 2022-8-19 18:00:05

你既然知道它没有被初始化了 , 那看它的值就感觉没什么意义

陈尚涵 发表于 2022-8-19 19:10:56



int a; //a随机
int a={};//a是0
int a={1};//a是0,a是1

望采纳{:10_257:}
页: [1]
查看完整版本: 关于数组的问题