二维数组的数组名字是什么类型?C语言

[复制链接]
查看11 | 回复3 | 2008-11-11 10:42:25 | 显示全部楼层 |阅读模式
我好像记得二维数组名是一个指向指针的指针,我定义了下面一个数组
int maze[M+2][N+2];
还有一个把这个数组初始化的函数。
void init(int **matrix, int width, int length);
我是这样调用的:init(maze,M+2,N+2);
可是一个错误指向调用这行:
error C2664: 'init' : cannot convert parameter 1 from 'int [8][10]' to 'int ** '
我想是哪错了,脑袋有些乱了,请问怎么改一下??
M N 用宏定义过了:
#define M 6
#define N 8

回复

使用道具 举报

千问 | 2008-11-11 10:42:25 | 显示全部楼层
二维数组是一个二级指针没错, 但是在形参使用的时候有规定,形参的类型一定要和实参一模一样. (形参现在是int**,实参是int(*)[10]或int[8][10]) 在这里因为实参是一个8行10列这片连续地址的首地址,因为形参也必须是要知道第二维的大小,这才可以最正确的指向, 所以你形参要写成 matrix[][N+2] 或者 (*matrix)[N+2] 这样就不会警告了.PS:你虽然这里是二维的,但是你给的参数是maze,这里相当于是数组的第一个元素的地址,也就是相当于maze[0](相当于一维),所以你函数里的参数写成int *matrix会更好....
回复

使用道具 举报

千问 | 2008-11-11 10:42:25 | 显示全部楼层
(int **)强制转换一下...
回复

使用道具 举报

千问 | 2008-11-11 10:42:25 | 显示全部楼层
你的M.N带表具体的数吗,你这样写很片面,报错的表面意义是,不能转换第一个参数,这样给二维数组赋值是不可以的!要么声明时赋值,要么利用for循环!...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行