C++如何对全局二维数组进行-1初始化?memset无效问题求解
问题原因
- 核心错误是你将
memset(arr,-1,sizeof(arr))这条可执行语句写在了函数外部的全局作用域,C++语法不允许在函数外执行赋值、函数调用这类操作,因此这条语句根本不会被运行,数组自然无法完成初始化。 - 补充说明:memset本身是按字节为单位赋值的操作,int类型的每个字节填充为0xff(即十进制-1)后,拼接起来正好对应int类型的-1,你写的memset参数逻辑没有问题,不需要调整。
解决方法
方案1(推荐,全场景兼容)
将memset语句移动到main函数的最开头,程序启动后优先执行数组初始化:
#include <bits/stdc++.h> using namespace std; int arr[10][10]; int func(){ // 此处正常使用全局arr即可 // if(arr[x][y]!=-1) //do something } int main(){ memset(arr,-1,sizeof(arr)); // 移到main函数最开头执行 // 后续其他业务代码 }
方案2(定义时初始化,依赖编译器扩展)
如果不想在main函数中写初始化语句,也可以在定义数组时直接使用GCC/Clang支持的范围初始化语法,直接将数组全量初始化为-1:
int arr[10][10] = {[0 ... 9][0 ... 9] = -1};
注意该语法不属于C++标准规范,仅部分编译器支持,跨平台开发场景不推荐使用。
内容的提问来源于stack exchange,提问作者Anonymous User
相关产品推荐
相关产品推荐

