一、数组名是指针常量,这个指针常量保存数组首元素的地址
对数组名取地址是数组的地址
二、[ ] == *( )
三、对于整型一维数组a来说:
a : 数组名,表示指针常量,保存数组首元素的地址
&a:代表数组的地址 对数组名取地址 == 数组的地址
*(&a) == a 对移位数组的地址取值 == 一维数组首元素的地址
四、对于二维数组来说,不能省略列,可以省略行,因为列确定步长
a + i :第i+1个一维数组的地址
*(a+i):第i+1个一维数组的首元素的地址
*(a+i)+j:第i+1个一维数组的第j+1个元素的地址
*(*(a+i)+j):第i+1个一维数组的第j+1个元素的值
五、对于三维数组来说:
&a:三维数组的地址
a:三维数组的数组名,也就是首个二维数组的地址
*a: 首个二维数组的首个一维数组的地址
**a:首个二维数组的首个一维数组的首元素的地址
***a:首个二维数组的首个一维数组的首元素的值
六、int (*pa)[3];
pa = &a; 一维数组当函数形参被转换成一维指针
传二维数组名,用一维数组指针接
七、在C99下允许动态数组(用变量指定数组长度),一般不用(C88则不允许)
八、发现段错误 首先检查有无野指针 ,然后查有无对0地址进行操作,最后查scanf有没有取地址