C++ 的二维数组初始化

2024年11月22日 08:50
有3个网友回答
网友(1):

(1)iostream后面不加.h,
(2)int n[3][3]=0有误,不能对数组进行这样的初始化,应该是对数组元素逐个赋值
(3)int (*m)[3]=new int[3][3]; 前面不加int,加上的话,相当于在局部对m重新定义

初始化方法如下:
(1)int m[3][3];
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
m[i][j] = 0;
(2)int **m = new int*[3];
for(int i = 0; i < 3; i++)
{
m[i] = new int[3];
for(int j = 0; j < 3; j++)
m[i][j] = 0;
}
(3)int *m[3];
int **m = new int*[3];
for(int i = 0; i < 3; i++)
{
m[i] = new int[3];
for(int j = 0; j < 3; j++)
m[i][j] = 0;
}
第二种写法和第三种写法本质上一样的,指向指针的指针其实就是指针的数组

网友(2):

绝对错了,不错你扇死我!
二维数组的初始化分为,一种为按行分段初始化,另一种为按行连续初始化。
int
a[2][3]={{5,6},{7,8},{9,10}};
这是第一种,
int
a[2][3]={5,6,7,8,9,10};
这是第二种。
a这个二维数组一共2行3列共6个存储空间,图形为:
5
6
7
8
9
10
正好占满。
而且C语言默认可以省略行数,但不能省略列数
你看看你的初始化
int
a[][4]={{0,0,3},{},{0,10}};
行数省略是没有任何问题的。
但是你是按行分段初始化
第一行0
0
3
第二行
第三行0
10
注意了,你只对其中3行进行了初始化,第4行丢了。
所以a是一个半初始化的数组,C编译系统绝对不承认!

网友(3):

上面的代码中最后少了};
另外数组不能整体拷贝.只能通过下标逐个赋值