ICCAVR单片机C语言关于二维数组的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/24 07:57:50
const uchar ASCII[10][2]={0X30,'0',0X31,'1',0X32,'2',0X33,'3',0X34,'4',0X35,'5',0X36,'6',0X37,'7',0X38,'8',0X39,'9'};//定义一个二维数组,存储在程序存储区
const uchar TABLE[11]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XFF};//定义一个一维数组,存储在程序存储区
uchar disp_buff[6]={1,2,3,4,5,6};
……
……
……
void abc(uchar data[],uchar num)
{
uchar x=0,y=0;
uchar i,j;
uchar const *ip1;
uchar const *ip2;
ip1=TABLE; //这样引用可以
ip2=ASCII; //这样引用为什么不可以?
ip1=&TABLE[0]; //这样引用可以
ip2=&ASCII[0][0]; //这样引用却可以
for(i=0;i<num;i++)
{
;
}
}
我想问的是二维数组为何不能直接将指针引用数组名
ip2=ASCII; 这样为什么不可以啊?编译时出错
ip2=&ASCII[0][0]; 而这样却可以
而一维数组这两种方式都可以
ip1=TABLE;
ip1=&TABLE[0];
还有就是二维数组在函数调用时可否做实参进行参数传递啊?
如果可以那要怎么传递参数,请举个

ASCII是一个指向二维数组的指针常量。声明uchar (*ip2)[2]数组指针(看过有些书称之为行指针),ip2=ASCII;这样就可以通过编译并引用ASCII数组了。

二维数组在函数调用时可以做实参进行参数传递。
被调函数可以这样声明 void exmpl_fun(uchar (*pAryASCII)[2]);;
也可以这样void exmpl_fun(uchar pAryASCII[][2]);。

ASCII的类型是const uchar**,ip2的类型是const uchar*