鱼C论坛

 找回密码
 立即注册
查看: 2021|回复: 5

[已解决]关于数组的问题

[复制链接]
发表于 2022-8-19 17:48:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么a[3]的值会是0呢?a[3]应该是没有被初始化到,应该是一个随机的数才对啊?
#include <stdio.h>
int main(void)
{
  int a[5] = {1, 3, 5};
  printf("%d\n", a[3]);
  return 0;
}
最佳答案
2022-8-19 17:58:07
int a[5]; //此时五个数都是随机数
int a[5] = {0}; //此时五个胡都被初始化为0
int a[5] = {1, 2, 3}; //此时a数组的值是{1, 2, 3, 0, 0}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-19 17:53:10 | 显示全部楼层
本帖最后由 一点点儿 于 2022-8-19 17:55 编辑

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

int a[5] = {1, 3, 5}; 这句初始化,将a[3]、a[4]赋值为0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-19 17:58:07 | 显示全部楼层    本楼为最佳答案   
int a[5]; //此时五个数都是随机数
int a[5] = {0}; //此时五个胡都被初始化为0
int a[5] = {1, 2, 3}; //此时a数组的值是{1, 2, 3, 0, 0}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-19 17:58:16 | 显示全部楼层
本帖最后由 jackz007 于 2022-8-19 18:19 编辑

        用一个循环把它们的数值都打印出来一看不就一目了然了。
#include <stdio.h>
int main(void)
{
        int i , a[5] = {1, 3, 5}                         ;
        printf("%d" , a[0])                              ;
        for(i = 1 ; i <  5 ; i ++) printf(",%d", a[i])   ;
        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 [esp+18], 0              ; | <--- a[0] = 0
00401366  |.  C74424 1C 00000000         mov     dword ptr [esp+1C], 0              ; | <--- a[1] = 0
0040136E  |.  C74424 20 00000000         mov     dword ptr [esp+20], 0              ; | <--- a[2] = 0
00401376  |.  C74424 24 00000000         mov     dword ptr [esp+24], 0              ; | <--- a[3] = 0
0040137E  |.  C74424 28 00000000         mov     dword ptr [esp+28], 0              ; | <--- a[4] = 0
00401386  |.  C74424 18 01000000         mov     dword ptr [esp+18], 1              ; | <--- a[0] = 1
0040138E  |.  C74424 1C 03000000         mov     dword ptr [esp+1C], 3              ; | <--- a[1] = 3
00401396  |.  C74424 20 05000000         mov     dword ptr [esp+20], 5              ; | <--- a[2] = 5
0040139E  |.  8B4424 18                  mov     eax, dword ptr [esp+18]            ; |
004013A2  |.  894424 04                  mov     dword ptr [esp+4], eax             ; |
004013A6  |.  C70424 24304000            mov     dword ptr [esp], 00403024          ; |ASCII "%d"
004013AD  |.  E8 6E080000                call    <jmp.&msvcrt.printf>               ; \printf
004013B2  |.  C74424 2C 01000000         mov     dword ptr [esp+2C], 1
004013BA  |>  837C24 2C 04               /cmp     dword ptr [esp+2C], 4             ; |
004013BF  |.  7F 1F                      |jg      short 004013E0                    ; |
004013C1  |.  8B4424 2C                  |mov     eax, dword ptr [esp+2C]           ; |
004013C5  |.  8B4484 18                  |mov     eax, dword ptr [esp+eax*4+18]     ; |
004013C9  |.  894424 04                  |mov     dword ptr [esp+4], eax            ; |
004013CD  |.  C70424 27304000            |mov     dword ptr [esp], 00403027         ; |ASCII ",%d"
004013D4  |.  E8 47080000                |call    <jmp.&msvcrt.printf>              ; \printf
004013D9  |.  834424 2C 01               |add     dword ptr [esp+2C], 1
004013DE  |.^ EB DA                      \jmp     short 004013BA
004013E0  |>  C70424 0A000000            mov     dword ptr [esp], 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[0]、a[1]、a[2] 赋值为 1、3、5,所以,a[3] 的值一定是 0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-19 18:00:05 | 显示全部楼层
你既然知道它没有被初始化了 , 那看它的值就感觉没什么意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-19 19:10:56 | 显示全部楼层
int a[5]; //a[3]随机
int a[5]={};//a[3]是0
int a[5]={1};//a[3]是0,a[0]是1

望采纳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 12:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表