华剑缘
一切都在这个过程中获得,将那些目标埋藏于心中
posts - 19,comments - 20,trackbacks - 0

一个矩阵类Matrix 类,在构造函数中根据参数创建数据成员:一个二维数组,类中实际定义的二维数组的数据成员是一个指针 ( 二级指针 ) , int **pMatrix 。 在构造函数中根据传送的参数为这个二维数组分配空间: pMatrix = newint[x][y]
~~~~~~~~
 int **pMatrix;
pMatrix = new int [x][y] ;

~~~~~~~~




*pMatrix = new int[x][y]
这样她提示什么

 error C2440: '=' : cannot convert from 'int (*)[1]' to 'int *'

编译器说new int [x][y]是int (*)[1]型的
 
如果改成:
int **pMatrix;
*pMatrix= new int [x];

倒可以通过编译

??????


//忘了从什么地方看到某人这么说:

动态数组不能用在二维……
动态数组实际上是一个指针,为其分配空间
如果想设置二维数组的话,就必须设置一个指针类型的动态数组,数组中的每个项都是另一个二维数组
举例:
int **a = new int* [m];
for(int i=0; i<m; i++)
  a[i]= new int[n];

释放内存时要先
for(i=0; i<m; i++)
  delete[] a[i];
然后再
delete[]  a;


呵呵;

posted on 2006-04-09 22:54 华剑缘 阅读(569) 评论(2)  编辑 收藏 引用

FeedBack:
# re: 动态数组不能用在二维……(惭愧现在才知道)
2006-04-10 09:19 | 沐枫
你那是C语言。只不过是把malloc用new来替代罢了。
真正的C语言(C99)是支持动态数组的,如:

void func(int N)
{
int arr[N][N] = {0};
...
}

对于C++来说,则:
void func(int N)
{
vector<vector<int> > arr(N);
for_each(arr.begin(), arr.end(), bind2nd(mem_fun_ref(&vector<int>::resize), N));
...
}
  回复  更多评论
  
# re: 动态数组不能用在二维……(惭愧现在才知道)
2006-04-11 16:09 | 任我行
simulate array
int **gf16 = (int**)malloc(sizeof(int*)*16);
for (m = 0; m < 16; m++) {
gf16[m] = (int*)malloc(sizeof(int)*4);
}

for (i = 0; i < 4; i++)
gf16[i][i] = 1;   回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理