指针变量占用的内存空间大小根据所使用的操作系统及编译环境而定,指针类型占用的字节数是不同的。
一般而言:
16位机器的代码时,指针占2个字节
32位机器的代码时,指针占4个字节
64位机器的代码时,指针占8个字节
对于一个具体的测试环境,可以用下面的语句精确的知道指针类型占用的字节数:
printf( " %d\n " , sizeof(int *) ) ;
测试环境:Ubuntu 64位
查看系统的版本为Ubuntu18.04 64位
struct TRef
{
char* before;
char* after;
};
int main()
{
struct TRef r ;
printf("sizeof(int) = %d\n", sizeof(int));
printf("sizeof(r) = %d\n", sizeof( r ) );
printf("sizeof(r.before) = %d\n", sizeof(r.before));
printf("sizeof(r.after) = %d\n", sizeof(r.after));
printf("&r.before = %p\n", &r.before);
printf("&r.after = %p\n", &r.after);
return 0;
}
运行结果:
可见指针变量在64位机器中是占用8个字节的内存空间大小的
同样的程序运行于32位机器时,测试环境windows下Qt creater32位环境下:
在网上看到还有这种言论,真是误人子弟