# 指针数组: 指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型;在32位系统中,指针占四个字节。

char* arr[4];//存放4个char类型的指针

对于语句"char* arr[4];",因为"[]"的优先级要比" * "的高,所以arr先于"[]"结合构成一个数组的定义,数组名为arr;而"char* "修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 char 类型数据的指针。 图示:

alt

# 数组指针: 数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

char (*arr)[4];//指针arr指向数组char[4];数组元素为char

对于"char (*arr)[4];","()"的优先级比"[]"高," * "号和arr构成了一个指针,指针的变量名为 arr, char 修饰的是数组的内容,即数组的每个元素,也就是说 arr 是一个指针指向有4个元素的 char 类型数组。 图示:

alt

对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。