1.例子:
#include <iostream>
#include<string>
using namespace std;
int main()
{
char a[] = "1234";
string b = "12345689";
cout << sizeof(a) << endl;
cout << sizeof(b) << endl;
cout<<sizeof(1==2)<<endl;
return 0;
}
2.结果:
3.分析:
char a[] = "1234";
对于c串而言,以'\0'结尾,因此该串就是5个char的元素组成
一个char占1个字节
故
sizeof(a) = 5
sizeof(string)
而对于string
无论你的string里放多长的字符串,它的sizeof()都是固定的,
字符串所占的空间是从堆中动态分配的,与sizeof()无关。
sizeof(b) = 32 ;其实是编译器为string分配的空间
4.sizeof()的定义
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
(sizeof是一个关键字,以字节位单位,
给出变量或者类的内存大小,也就是占多少个字节)
它不是一个函数!!!!可以不加括号
5.特殊case
#include <iostream>
#include<string>
using namespace std;
int main()
{
int a = 0;
cout<<sizeof(a=3)<<endl;
cout<<a<<endl;
return 0;
}
输出结果
为什么第二行输出为0? 而不是3 ? 原因?:
由于sizeof不能被编译成机器码,所以sizeof作用范围内,
也就是()里面的内容也不能被编译,而是被替换成类型。
=操作符返回左操作数的类型,所以a=3相当于int
,而代码也被替换为:
cout<<sizeof(int)<<endl;
6.常见的一些case
#include <iostream>
#include<string>
using namespace std;
int main()
{
char a[] = "abcd"; // 5
int b[20] = {3, 4}; // 20*4 = 80
char c[2][3] = {"aa", "bb"}; // 2*3 =6
cout<<sizeof(a)<<endl; //
cout<<sizeof(b)<<endl; //
cout<<sizeof(c)<<endl; //
}
7.对于指针
sizeof(ptr) 取决于32位系统还是64位系统
#include <iostream>
#include<string>
using namespace std;
int main()
{
int *d = new int[10];
cout<<sizeof(d)<<endl; //8,此时是64位系统
double* (*a)[3][6];
cout<<sizeof(a)<<endl; // 8
cout<<sizeof(*a)<<endl; // 144
cout<<sizeof(**a)<<endl; // 48
cout<<sizeof(***a)<<endl; // 8
cout<<sizeof(****a)<<endl; // 8
return 0;
}
分析:
a是指向数组double(*) [3][6]的指针,
故sizeof(a) = 8;
*a 就是指针指向的对象,数组名,
sizeof(*a) = 18 * 8 = 144
后面的解释不来,这个不会...
花里胡哨的东西