You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言打印未初始化二维数组出现随机值问题求助

未初始化局部数组导致的随机值问题

问题原因

你定义的int map[10][10]是局部变量,存储在栈内存区域。C语言的规则是:局部变量不会被自动初始化,栈内存中会保留之前程序运行留下的残留数据(也就是所谓的“垃圾值”)。你直接打印未初始化的数组元素,输出的就是这些随机的垃圾值,而非你期望的0。

解决办法

有三种常用方式可以让数组初始化为全0:

1. 声明时直接初始化

利用C语言的初始化规则,只要初始化列表中至少有一个元素,未明确赋值的元素会自动被初始化为0:

#include <stdio.h>

int main(){
    int map[10][10] = {0}; // 仅需写{0}即可让整个数组全为0
    for(int i = 0; i < 10; i++){
        for(int j = 0; j < 10; j++){
            printf("%d ",map[i][j]);
        }
        printf("\n");
    }
    return 0;
}

2. 循环手动赋值

在打印数组前,通过嵌套循环遍历每个元素,手动赋值为0:

#include <stdio.h>

int main(){
    int map[10][10];
    // 先初始化全0
    for(int i = 0; i < 10; i++){
        for(int j = 0; j < 10; j++){
            map[i][j] = 0;
        }
    }
    // 再打印
    for(int i = 0; i < 10; i++){
        for(int j = 0; j < 10; j++){
            printf("%d ",map[i][j]);
        }
        printf("\n");
    }
    return 0;
}

3. 使用memset函数批量赋值

memset可以快速将一块内存区域的所有字节设为指定值,需要引入<string.h>头文件:

#include <stdio.h>
#include <string.h>

int main(){
    int map[10][10];
    memset(map, 0, sizeof(map)); // 将整个数组的内存块设为0
    for(int i = 0; i < 10; i++){
        for(int j = 0; j < 10; j++){
            printf("%d ",map[i][j]);
        }
        printf("\n");
    }
    return 0;
}

注:memset按字节赋值,这里将int类型的每个字节都设为0,最终整个int值自然为0,适用于所有数值类型的初始化。

内容的提问来源于stack exchange,提问作者Randaniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:33:30