C语言中一维数组与二维数组

int arr [4]  //定义了一个一维数组,长度为4;说明以下三个分别是什么类型;

(1)arr //类型为int *,表示数组元素首地址,即图中箭头指向的位置。


(2)arr+1 //类型为int *,表示数组元素首地址+1,即图中箭头指向的位置。


(3)arr [0] //类型为int ,表示第一个元素,即图中红色的格子。

int brr [3][4]  //表示定义了一个3行4列的二维数组,说明以下三个分别是什么类型;

(1)brr //类型为int(*p)[4], 把一个二维数组想象成一个特殊一维数组并遵循行优先原则,那么也表示数组首地址,int(*p)[4]的含义就是整型指针p指向有4个格子 ,就是数组指针(指向数组的指针),即图中箭头指向的位置。


(2)brr+1//类型为int * p[4],同样把二维数组想象成一维数组,那么brr+1就是首地址+1,即图中箭头指向的位置。


(3)brr [0]//类型为int *,brr[0]==arr,即图中红色的格子。

(4)brr [0]+1//类型为int *,因为指针加法不会改变指针的类型,即图中黄色的格子。

(5)brr [0][0]//类型为int,表示的是数组的第一个元素,即图中的黑色粗框。


总结:遇到复杂类型式子

        1.优先级

        2.看到以下符号

           [ ] 数组要考虑有几个格子;每个格子的数据类型;

         ()函数要考虑参数列表,返回值;

            *  指针要考虑指针指向的是什么 

练习:

(1)int(* p)[4]    ()的优先级比 * 优先级低,那么表示的是指针p指向的是有4个格子的数组;  

(2)int  * p [4]         [ ]的优先级比 * 优先级高,那么表示的是有4个格子的数组p,保存的是指针。

猜你喜欢

转载自blog.csdn.net/cyy_0802/article/details/79943370