数组及指针数据类型

一、一维数组和二维数组的数据类型对比分析

以下我将通过分析图结合代码段的形式进行分析

int arr[4]   //如上图所示定义一个一维数组arr,其长度为4
arr         //数组名表示数组首元素地址,即为&arr[0],因为数组类型为整型,所以arr类型为int *
arr+1       //因为arr为地址,则arr+1为地址+1,所以仍为int *类型
arr[1]      //表示数组第二个元素,即上图中的2,类型为int
arr[1]+1    //表示数组第二个元素+1,仍为int

int brr[3][4]    //上图所示如定义一个三行四列的二维数组brr
brr              //因为二维数组为行优先,所以brr表示指向二维数组brr第一行,即黄色框那一行,类型为int (*brr)[4]
brr+1            //由brr类型,可知brr+1,指针+1,加到下一行,指向第二行,即红色框那一行,类型仍为int (*brr)[4]
brr[1]           //指向绿色那个格子,是地址,与上边一维数组的arr是同样的作用,则类型为int *
brr[1]+1         //与arr+1同理,指向紫色那个格子即类型为int *
brr[1][1]        //表示上图中绿色那个格子,是值,即为int型
brr[1][1]+1      //表示brr[1][1]这个值加1,仍为int

二、判断数据类型

具体步骤有以下两步:

(1)确定属性(即其为指针?数组?还是函数?)这个主要根据优先级来判断

(2)如果是指针,只考虑一个,即其指向的内容;

        如果是数组,考虑两个方面,一是长度,二是内容(即每个格子放什么类型的数据);

        如果是函数,也要考虑两个方面,一是函数的参数列表,二是函数的返回值。

以下,将通过代码段展示对常见的类型分析进行总结。

int (*p)[4]      //由优先级可知,p为指针,p指向一个由4个格子的一维数组,且每个格子都为整型,即p是指向数组的指针
              //p为数组指针

int *p[4]       //p为数组,该数组有4个格子,每个格子为一个整型指针,即为保存整型指针的数组。
             //p为指针数组

int (*p)()     //p为指针,指向一个函数
             //p为函数指针

int *p()    //p为函数,没有参数,返回值为整型指针          //p为指针函数

猜你喜欢

转载自blog.csdn.net/Aspiration_1314/article/details/79683444
今日推荐