<<Expert C Programming>>第9、10两章讲到数组和指针,这里就数组的数组、数组的指针、指针的数组和指针的指针的关系做个总结。
1.概念
C语言中的二维数组即数组的数组,eg: char a[2][3] ;
数组的指针即数组指针,eg: char (*a)[3];a是指向一个二维数组的指针
指针的数组即指针数组,eg: char *a[3]; a是一维数组,里面的类型是char*
指针的指针即二维指针,eg: char **a;
2.关系
2.1 在表达式中,数组名可以被改写成指针,改写的规则是:数组“最里面一层”的下标改成“*”;在表达式中,指针不能改写为数组名。
数组的数组可以赋给数组的指针;eg: char a[2][3]; char (*a1)[3] = a;
指针的数组可以赋给指针的指针;eg: char *a[3]; char **a1=a;
2.2 当"数组的数组"、"数组的指针"、"指针的数组"和"指针的指针"这四种类型作为函数的形参时,情况有所不同:
当函数的形参是“数组的数组”时,实参可以是"数组的数组"或者"数组的指针" ;
当函数的形参是“数组的指针”时,实参可以是"数组的数组"或者"数组的指针" ;
当函数的形参是“指针的数组”时,实参可以是"指针的数组"或者"指针的指针" ;
当函数的形参是“指针的指针”时,实参可以是"指针的数组"或者"指针的指针" ;
也就是说:数组的数组和数组的指针可以双向改写, "指针的数组"或者"指针的指针" 可以双向改写,原因是:当数组出现在函数形参中时,数组名就是指向数组第一个元素的指针。
3.测试用例