32位系统默认指针大小为4个字节(8位为一个字节),因为32位系统默认的内存寻址空间是4G,所以指针大小为4个字节可以完成对4G空间的寻址。2^32约为4个G;
64位系统默认指针大小为8个字节,理论上寻址空间可达到1800万个TB,指针大小为8个字节可完成对其的寻址。
32位处理器一次只能处理32位,也就是4个字节的数据;而64位处理器一次就能处理64位,即8个字节的数据。
#include <stdio.h>
int main()
{
int *p1,a[4];
char *p2,b[4];
float *p3,c[4];
double *p4,d[4];
printf("%d\n",sizeof(p1));
printf("%d\n",sizeof(p2));
printf("%d\n",sizeof(p3));
printf("%d\n",sizeof(p4));
printf("\n");
p1 = a;
p2 = b;
p3 = c;
p4 = d;
printf("%d\n",sizeof(*p1));
printf("%d\n",sizeof(*p2));
printf("%d\n",sizeof(*p3));
printf("%d\n",sizeof(*p4));
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191027125719572.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzY0MTg1MA==,size_16,color_FFFFFF,t_70)
可见,不同类型的指针,其本身的大小是一样的(都是8个字节,因为笔者是64位的系统),指针所指数据类型的大小则为原来数据的大小(int和float是 4字节,double8字节,char1字节);