C语言入门疑问:二维数组直接赋值为何失效及正确写法咨询
关于C语言二维数组赋值的问题解答
嘿,我来帮你把这个问题掰扯清楚~首先咱们先从你的代码本身的问题说起:
1. 数组类型的根本不匹配
你定义的是:
char * myArray[100][100];
这是一个存储char*(字符指针)的二维数组,也就是说myArray[i][j]的每个元素都是一个指向字符/字符串的指针,而不是整数类型。但你后面试图赋值的[1,2,3]是整数数组,类型完全不搭,这编译器肯定会报错。
如果你的目标是存储整数,那应该把数组定义改成:
int myArray[100][100];
先把类型对齐,这是基础。
2. C语言不支持直接给数组名赋值
就算类型匹配了,myArray[0] = [1,2,3]这种写法在C里也是无效的——因为数组名是一个不可修改的左值,它本质上是指向数组首元素的常量指针,你不能像给变量赋值那样直接给数组名塞一个数组字面量。
举个简单的例子,你也不能这么写:
int arr[5]; arr = {1,2,3,4,5}; // 错误!数组名不能被赋值
只有在数组初始化的阶段,才能用{}这种方式批量赋值,比如:
int myArray[100][100] = { {1, 2, 3}, // 给myArray[0]的前3个元素赋值,剩下的元素会自动初始化为0 // 其他行可以按需添加初始化内容 };
3. 初始化后的批量赋值方法
如果是在数组初始化完成之后,想给myArray[0]的前几个元素赋值,除了逐个赋值:
myArray[0][0] = 1; myArray[0][1] = 2; myArray[0][2] = 3;
还可以用memcpy函数来批量拷贝,效率更高:
int temp[] = {1, 2, 3}; memcpy(myArray[0], temp, sizeof(temp));
不过要注意,myArray[0]的元素类型必须和temp的类型一致,不然会有内存错乱的风险。
补充:如果你的初衷是存储字符指针/字符串
要是你本来就是想定义存储字符指针的二维数组,那正确的赋值方式应该是这样:
char* myArray[100][100]; // 逐个赋值字符串指针 myArray[0][0] = "apple"; myArray[0][1] = "banana"; // 或者初始化时批量赋值 char* myArray[100][100] = { {"apple", "banana", "cherry"}, // 其他行的初始化内容 };
内容的提问来源于stack exchange,提问作者dppham1
相关产品推荐
相关产品推荐

