求解答为什么C语言二维数组是全局变量时输出为0,局部变量时输出为随机数

此时输出为0的矩阵

int map[10][10];
int main()
{
    int i, j;
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            printf("%d ", map[i][j]);    
        }
        putchar('\n');
    }
    return 0;
}

此时输出为地址随机数

int main()
{
    int map[10][10];
    int i, j;
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            printf("%d ", map[i][j]);    
        }
        putchar('\n');
    }
    return 0;
}

c语言的编译器就是这样规定的
全局变量,一般系统会初始化为0;
而函数内的局部变量,没有初始化这一过程.所以会得到随机值
局部变量改成 int map[10][10] = {0}; 就都初始化为0了
你题目的解答代码如下:

#include <stdio.h>
int main()
{
    int map[10][10] = {0};  //加上  = {0}
    int i, j;
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            printf("%d ", map[i][j]);
        }
        putchar('\n');
    }
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

显然编译器对全局变量初始化为0,对局部变量不初始化

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632