C++ 的二维数组初始化

#include<iostream.h>
class matrix{
public:
int *m[3];
matrix(int n[3][3]=0)
{
int (*m)[3]=new int[3][3];
m=n;
}
这样初始化程序无法运行。。。。。。
请高人指点!!
坐等!!!

(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;
}
第二种写法和第三种写法本质上一样的,指向指针的指针其实就是指针的数组
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-10
绝对错了,不错你扇死我!
二维数组的初始化分为,一种为按行分段初始化,另一种为按行连续初始化。
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编译系统绝对不承认!
第2个回答  2008-04-05
上面的代码中最后少了};
另外数组不能整体拷贝.只能通过下标逐个赋值
相似回答