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

C语言如何将二维数组初始化为非0的指定值(例如-1)

二维int数组初始化为-1的正确实现

你提供的现有代码存在行列索引循环边界匹配错误的问题:_table[i][j]的第一个下标i对应行维度,第二个下标j对应列维度,但你外层循环的终止条件用了列数MAX_COLUMNS,内层循环用了行数MAX_ROWS,会触发越界访问。

修正后的双层循环实现

兼容性最强,适用于所有初始化值场景:

void init_table(int _table[][MAX_COLUMNS]) {
    // 外层遍历行,边界为行数MAX_ROWS
    for (int i = 0; i < MAX_ROWS; i++) {
        // 内层遍历列,边界为列数MAX_COLUMNS
        for (int j = 0; j < MAX_COLUMNS; j++) {
            _table[i][j] = -1;
        }
    }
}

更高性能的memset实现

因为int类型的-1在内存中所有字节均为0xff,可以直接用memset按字节批量填充,性能远高于双层循环:

#include <string.h>

void init_table(int _table[][MAX_COLUMNS]) {
    // 总字节数 = 单元素字节数 * 行数 * 列数
    memset(_table, 0xff, sizeof(int) * MAX_ROWS * MAX_COLUMNS);
}
  • 注意:memset按字节填充的特性,仅适用于初始化值为0(所有字节为0x00)或-1(所有字节为0xff)的int数组场景,其余数值不要用该方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:45:03