一、一维数组和二维数组的数据类型对比分析
以下我将通过分析图结合代码段的形式进行分析
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为指针函数