sizeof用来求出所占的字节数
sizeof是个关键字,不是函数,sizeof是在编译期间求值。
(1)基本类型和类的大小
cout<<sizeof(char)<<" "<<sizeof(int)<<" "<<sizeof(string)<<" "<<sizeof(vector<int>);
1 4 32 20
类的大小都是固定的,和对象无关,具体怎么算没仔细研究,好像是只和成员变量和虚函数表有关。
(2)数组的大小是数组所占内存的总大小,指针的大小是系统的大小
代码:
int a[]={0,1,2,3,4,5};
int *p=a;
cout<<sizeof(a)<<" "<<sizeof(p);
输出:
24 4
PS:
我们用64的win10操作系统的时候,指针应该是8个字节,但是编译器往往选择编译成32位的程序,所以这指针还是4个字节。
(3)数组和指针作为参数传递时,都是传递指针
代码:
int getSize(int x[])
{
return sizeof(x);
}
int getSize2(int* p)
{
return sizeof(p);
}
int main()
{
int a[]={0,1,2,3,4,5};
int *p=a;
cout<<getSize(a)<<" "<<getSize(p)<<" "<<getSize2(a)<<" "<<getSize2(p);
return 0;
}
输出:
4 4 4 4
(4)char数组表示的字符串
代码:
char s1[]="abcdef";
char s2[]="";
cout<<sizeof(s1)<<" "<<sizeof(s2);
输出:
7 1