2. for (i=0; i
3. p[i] = (int *)malloc(sizeof(int)*COL);
这样才可以,而不是像我开始想的那样直接int **p = (int **)malloc(sizeof(int*)*ROW*COL);
---------------
如果使用二维数组当做参数,如何写?
int function(int **p, int ROW, int COL, ...)
{
/* function sentences */
}
这么写对么?其实是不正确的,p是指向指针的指针,和二维数组名还是有区别的,如果你的确是想把二维数组当成参数,而不是一个**指针,那么应该这么写才正确:
int function(int (*p)[常量值], int ROW, int COL, ...)
{
/* function sentences */
}
注:"常量值"的位置必须是常量,否则编译器将不能确定这个数组的size。
另外,如果声明一个二维数组如
int data[][3] = {{1, 2, 3}, {4, 5, 6}};
那么如果设一个指针指向这个二维数组,这个指针该如何写?
int **p = data; // 这么写对么?
其实是不正确的,编译器给出一个warning:
'int ** ' differs in levels of indirection from 'int (*)[3]'
告诉我们int **类型和二维数组的int (*)[3]是不兼容的,是有区别的。
通过查看warning, 我们知道该怎么写了
int (*p)[3] = data; // 这样写就正确了
结论:二维数组名data的类型为int (*)[3]
-----------------
访问二维数组
可以使用p[i][j], 也可以使用*(*(p+i)+j), 也可以用*(p[i]+j), (*(p+i))[j]
|