如何用一维数组列表初始化二维数组?
用一维数组初始化二维数组的正确姿势
嘿,我来帮你搞定这个二维数组初始化的问题~咱先说说你写的代码为啥行不通:
你尝试用int array[][3] = { a,b };来初始化二维数组,但在C语言里这种写法是不合法的。原因是:数组名a和b在表达式里会自动退化为指向首元素的指针(类型是int*),而二维数组array的每一个元素都是长度为3的int数组(类型是int[3]),这俩类型完全不匹配,编译器肯定会报错哒。
接下来给你两种可行的解决方案:
方案1:直接用嵌套初始化列表(最推荐)
这是C语言初始化二维数组的标准写法,直接把每个一维数组的元素嵌套在大括号里就行:
void main() { int array[][3] = { {1,2,3}, {4,5,6} }; }
编译器会自动识别出这是两个长度为3的数组,从而自动确定二维数组的第一维大小是2,完美符合你的需求。
方案2:用已定义的一维数组拷贝元素
如果你一定要先定义好一维数组a和b,再把它们的内容放到二维数组里,那得用元素拷贝的方式(因为C语言里数组不能直接赋值,比如array[0] = a;这种写法是非法的):
#include <string.h> // 用memcpy的话需要这个头文件 void main() { int a[] = {1,2,3}; int b[] = {4,5,6}; int array[2][3]; // 这里要明确第一维的大小是2 // 方式A:手动循环逐个拷贝 for(int i = 0; i < 3; i++) { array[0][i] = a[i]; array[1][i] = b[i]; } // 方式B:用memcpy批量拷贝(更高效) // memcpy(array[0], a, sizeof(a)); // memcpy(array[1], b, sizeof(b)); }
两种方式都能把a和b的内容复制到二维数组的对应行里,你可以根据自己的习惯选~
内容的提问来源于stack exchange,提问作者Display Name
相关产品推荐
相关产品推荐

