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
相关产品推荐
相关产品推荐

