什么是数组指针?什么是指针数组?是指针还是数组,大多数初学者都容易混淆;下面将进行详细叙述:
数组指针
数组指针是指针还是数组?
答案是:指针
我们来看下面案例:
整形指针:能够指向整形数据的指针;
浮点型指针:能够指向浮点型数据的指针;
那么,数组指针是指向数组的指针,存放的是数组的地址。
指针数组
指针数组:是·数组,存放元素的地址。
我们来看下面代码:
从上面例子来看,指针数组是指针变量以数组的形式存储在内存中;
那么二者之间的表达形式是否相同?我们来看实例:
前者为指针数组,后者为数组指针;(*p)表示指向的数组类型为int *;[10]表示指向的数组为10个元素;
二者之间的形式存在差异的原因是什么?
首先,我们需要确定一个优先级问题:()>[]>*
*p[n]:我们来根据优先级排序可知,首先,[]>*,p是一个数组,数组中元素类型为指针类型,一共n个元素;
(*p)[n]:从上述可知,()>[]>*,p是一个指针,指针指向的是一个数组,数组的长度为n;
由上述可知,指针数组是一个数组,数组中存储是指针,其在编辑器中所占的内存有多少字节由数组本身决定;而数组指针是一个指针,指针指向一个数组,在32位系统中占4个字节,而数组所占字节的大小还需要进一步判定;
经过以上了解,我们来看以下代码:
上述代码是对此次的总结,那么它们分别是什么?
int arr[5]:arr是一个整型数组;
int *p1[10]:p1是一个数组,共10个·元素,每个元素类型为int *;
int (*p2)[10]:p2是一个指针,指针指向的是一个数组,数组中10个元素类型为int;
int (*p3[10])[5]:p3是一个数组,共10个元素,每个元素是一个数组指针,该数组指针指向的共5个元素,每个元素类型为int。