sizeof(指针)是指针变量占用内存的大小(字节数),而指针是存储变量地址的,变量地址的长度即为指针变量所占内存大小,尽管不同类型变量所占内存大小不同(int四字节、char一字节),但指针存的只是首字节地址,不同的是指针递增时,增加的地址。
所以在32位机上,所有指针类型变量占用内存字节数都为4
因为32位机就是 4字节 * 8个二进制位/字节 计算出来的.
如果在64位机上,指针占用内存大小就是8个字节.
也有一种说法,指针是存变量地址,变量地址的长度与编译时使用的编译器有关,一般VS是win32,即32位,所以指针长度一般位4字节(4*8)
#include <iostream>
using namespace std;
int main(){
char c;
char *pc=&c;
int a;
int *pa=&a;
cout<<sizeof(c)<<"\t"<<sizeof(pc)<<"\t"<<(void *)pc<<"\t";
pc++;
cout<<(void *)pc<<endl;
cout<<sizeof(a)<<"\t"<<sizeof(pa)<<"\t"<<pa<<"\t"<<pa++<<endl;
return 0;
}
运行结果
1 4 006FFBF7 006FFBF8
4 4 006FFBDC 006FFBE0
请按任意键继续. . .
测试代码中,定义了两种类型的指针,变量所占字节,int为4个字节,char为1个字节,但指针所占字节一样都为4,不同的是指针递增,int类型指针++是原地址加上4,char类型是加上1,分别为对应类型的长度。
上面代码中cout输出char类型指针时,要在前面加(void ),不然会输出乱码,不然就用printf("%p\n", pc)来输出。之所以要用(void )是因为char,在cout的重载重当做字符串来处理的,遇到\0就结束,所以要强制类型转换(void)
来源:CSDN
作者:壹米吾七
链接:https://blog.csdn.net/qq_36192185/article/details/104634139