#include<iostream>
using namespace std;
int main() {
//整数数据类型
cout <<"char:"<< sizeof(char)<<endl;
cout <<"short:"<< sizeof(short)<<endl;
cout <<"int:"<< sizeof(int)<<endl;
cout <<"long:"<< sizeof(long)<<endl;
cout <<"long long:"<< sizeof(long long)<<endl;
//浮点数数据类型
cout <<"float:"<< sizeof(float)<<endl;
cout <<"double:"<< sizeof(double)<<endl;
//布尔类型
cout <<"bool:"<< sizeof(bool)<<endl;
return 0;
}
只需要使用sizeof关键字,我们就可以很轻松的获取到各个数据类型在内存中所占字节大小了.下面是这段程序打印的结果.
char:1
short:2
int:4
long:4
long long:8
float:4
double:8
bool:1
其中单位是字节,至于每个数据类型能存储多大的数据,涉及到二进制的一些知识,在此不多赘述,感兴趣自行了解.而long类型比较特殊,在不同的系统(linux或windos)和不同的系统环境(x64或x86)所占的大小也是不同的,不过目前只需要关注windos的结果即可.
下面我要详细讲解一下sizeof,很多人刚开始学的时候可能会一直认为它是一个函数,因为使用它的时候,我们常常会在后面加上括号.但是事实上,它是一个关键字,作用就是获取某个对象所占内存空间的大小.
#include<iostream>
using namespace std;
int main() {
int num = 10;
cout << "num所占空间大小为:" << sizeof num<<endl;
//cout << "int所占空间大小为:" << sizeof int;
return 0;
}
这里我把第二句打印注释了,因为第一句打印num不加括号完全是正常的,但是对于关键字,如int,double等,不加括号就会报错,这就要涉及到sizeof底层的语法定义了.
sizeof unary-expression
sizeof ( type-name )
什么意思呢,对于第一种调用,是指一个表达式,可以是变量num
,也可以是一个表达式num+10
,而第二种调用方式是加一个括号,里面是数据类型的名字.所以我们想直接获取int的大小,就必须加上括号,否则就会报错.同时我在这里发现了一个比较有趣的现象
#include<iostream>
using namespace std;
int main() {
int num = 10;
cout << sizeof (num+10)<<endl;//打印结果为4
cout << sizeof num + 10<<endl;//打印结果为14
//cout << "int所占空间大小为:" << sizeof int;
return 0;
}
对于第一个打印语句结果是4,因为int型的数据类型就是占了4个字节,而第二个结果却是14,这说明了sizeof的运算优先级非常高,这个式子会先运算sizeof(num)
,再和10进行相加,所以我们在使用的时候就需要注意了,如果是相求表达式的内存大小,就需要加上一个括号才行.
评论区