首先要区别int *p[2]和int (*p)[2],前者定义一个数组,该数组元素类型为整型指针;后者定义一个指针变量,该指针变量指向一个整型二维数组。
1.指针变量代表一个存储单元地址,占用存储单元一般为4个字节-即一个存储单元,(32位计算机)。与其基类型数组无关,因为它仅代表一个地址。
2.指针变量占用的存储单元与编译器有关。16位计算机为2个字节,32位计算机为4个字节。与基类型无关。
从格式上看,因为*p在括号里面,所以*和p先结合,所以p是指针类型,所以这个是数组指针,是指向一个有两个整形数组的指针,也就是p指针指向一个数组,p占4个字节(因为是指针类么)。
现在说说指针,所有指针占用的内存空间是4个字节,声明指针的时候,例如int *p;int是说明p指向的内存储存的变量是int型,更重要的是说明了这个指针的偏移单位,也就是p+1的话地址会增加int型的长度,p+1实际上在地址上是加了4
所有的指针类型变量所占的内存空间大小都是一样的,即:都只占一个基本存储单元
指针变量的基类型是指的指针所指向的地址空间中的数据空间大小
指针就是地址,跟类型无关。
占用的存储单元跟操作系统有关,比如在64位操作系统中,指针占8字节,32位操作系统中,占4字节,16位操作系统中,占2字节,以此类推。