C++primer 5.8sizeof 操作符--上(不同类型所占用的内存大小字节)
2015-05-16 15:19
465 查看
简介
sizeof 的总结: /article/1870977.html
sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示,返回值类型是size_t对char 类型或值为char 类型的表达式做sizeof 操作保证得1;
对引用类型做sizeof 操作将返回存放此引用类型对象所需的内存空间大小;
对指针做sizeof操作,返回存放指针所需的内存大小(4字节)
注意,如果需获取该指针所指向对象类型的大小(如int 对象那么是4字节),则必须对该指针进行解引用。
特别要注意的时,对于指针类型,都占4个字节,因为指针指向的是一个地址,32位操作系统就是4字节。当然如果是64位操作系统那就是8字节了。所以一般情况下 sizeof (p)=4
对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。因为sizeof返回整个数组在内存中的存储长度;
用sizeof 数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数。
==================================================================================================
一、关于sizeof
sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示,返回值类型是size_tsizeof(变量)就是求 p30那些类型所占字节(常用的!!!记住!!!)
sizeof 表达式的结果是编译时常量,有三种语法形式:
sizeof (type name);
sizeof (expr);
sizeof expr;
Sale_item item,*p; sizeof(Sale_item); sizeof item; sizeof *p;
将sizeof 应用在表达式expr上,将获得该表达式的结果的类型的长度(还是针对类型) ;
将sizeof用于expr时,并没有计算表达式expr的值。。
使用sizeof 的结果部分地依赖所涉及的类型:
对char 类型或值为char 类型的表达式做sizeof 操作保证得1 相当于sizeof(char);
对引用类型做sizeof 操作将返回存放此引用类型对象所需的内存空间大小;
对指针做sizeof操作,返回存放指针所需的内存大小( 4 字 节 !!!! ):如 sizeof (p)=4
注意,如果需获取该指针所指向对象类型的大小,则必须对该指针进行解引用。sizeof (* p),根据 指针p的类型,如果p是整型,那么就是 4 字节
特别要注意的时,对于指针类型,都占4个字节,因为指针指向的是一个地址,32位操作系统就是4字节。当然如果是64位操作系统那就是8字节了。所以一般情况下 sizeof (p)=4
对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。因为sizeof返回整个数组在内存中的存储长度;
用sizeof 数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数。
//例子1 double y[10]; //double 类型的数组,每个double类型占8字节 int x[10]; //int 类型的数组,每个int类型占4字节 int *p=x; double *p1=y; //double类型的指针才能指向double类型的数组,别写成int *p1=y char q='a'; cout<<sizeof(q)<<endl; //输出的是1 cout<<sizeof(x)<<endl; //sizeof(数组名),输出的是整个数组在内存中的存储长度,输出的是4*10=40 cout<<sizeof(y)<<endl; //sizeof(数组名),输出的是整个数组在内存中的存储长度,输出的是80 cout<<sizeof(p)<<endl;//sizeof(指针),输出的是指针所需内存大小,4个字节 cout<<sizeof(p1)<<endl;//sizeof(指针),输出的是指针所需内存大小,4个字节 cout<<sizeof(*x)<<endl;//*x=x[0]的值,x[0]是int型的数,所以输出的是整型数所占用的空间大小4字节 cout<<sizeof(*y)<<endl;//*y=y[0]的值,所以输出的是double型数所占用的空间大小8字节 cout<<sizeof(*p)<<endl;//输出指针p所指对象x[0]所占大小,因为是int型,所以输出的是4 cout<<sizeof(*p1)<<endl;//输出指针p所指对象y[0]所占大小,因为是double型,所以输出的是8 cout<<sizeof(x)/sizeof(*x)<<endl;//输出数组元素的个数,是10 cout<<sizeof(p)/sizeof(*p)<<endl;//输出元素的个数,是1 //输出结果 1 40 80 4 4 4 8 4 8 10 1
//上机实践一下这题 void Func ( char str[100]) { sizeof( str ) = 4 //数组名str做形参时,是一个指针,所以为4 } //str 是数组名 char str[] = “Hello” ; char *p = str ; int n = 10; sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) = 4
//例子2 用sizeof()函数计算每种类型变量所占用的内存大小,用字节表示 int main() { int a; long b; int *c; char *d; string s1("helloworld"); int Byteof_int=sizeof(a); int Byteof_long=sizeof(b); int Byteof_int_point=sizeof(c); int Byteof_char_point=sizeof(d); int Byteof_string=sizeof(s1); cout << "int:" <<Byteof_int<<endl; cout << "long:" <<Byteof_long<<endl; cout << "int *:" <<Byteof_int_point<<endl; cout << "char *:" <<Byteof_char_point<<endl; cout << "string:" <<Byteof_string<<endl; return 0; } //显示结果 /* int : 4 long :4 int *:4 char *:4 string:4
//总结 int : 4 字节 long :4 字节 bool:1字节 char:1字节 wchar_t:2字节 float:4字节 double:8 字节 指针类型:4 字节 string类型:4字节
//习 题 5.18 string类指针和string类对象用sizeof int main(){ //读取vector对象与初始化该对象 vector<string*> spvec; //注意是string 类型的指针,所以*不要忘记 string str; cout<<"enter string (ctrl+z to end)"<<endl; while(cin>>str) {string *pstr=new string;//指向string对象的指针 *pstr=str; spvec.push_back(pstr); } //输出每个string的内容及其相应的长度 vector<string*>::iterator iter=spvec.begin(); while(iter!=spvec.end()) { cout<<(**iter)<<endl;//使用的是vector里面的迭代器iter ,所以第一次解引用时,求得的是vector里面的元素,即string类的指针,第二次解引用求得的是该指针指向的对象的值 cout<<(**iter).size()<<endl;//因为是要输出string的长度,即里面有几个元素,那么就使用string对象自带的size函数 cout<<sizeof(*iter)<<endl;//*iter表示的是string类型的指针,相当于是sizeof(string *),对指针使用sizeof函数,将返回存放该指针所需的内存大小,返回4字节 cout<<sizeof(**iter)<<endl;//**iter是string指针所指的string对象,sizeof(**iter)求得的就是指针所指的对象的大小,string类型占用内存的大小是 4字节 iter++; } //释放各个动态分配的string对象 iter =spvec.begin(); while(iter!=spvec.end()) {delete *iter; //删除string对象所占用的内存空间,所以是*iter iter++;} return 0; } //输入:abcde qwertyu //输出结果: abcde qwertyu 5 7 4 4 4 4 //指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 //
相关文章推荐
- python 之 不同类型对象的内存占用、大小比较
- C/C++中不同数据类型所占用的内存大小
- 一个简单的数据类型判断:占用不同大小字节的变量比较
- C/C++中不同数据类型所占用的内存大小
- 【基础常识】常见变量类型在内存中占用大小
- java常见类型内存占用大小
- 不同语言基本数据类型(int、char、float、double....)对应字节大小
- C++ 基本语法之变量(指针)与数据类型(占用字节大小)
- 基本类型占用内存大小
- 黑马程序员---数据类型及内存占用字节
- C++ 类类型占用内存大小一题
- 不同指针类型,不同字节大小
- 不同语言基本数据类型(int、char、float、double....)对应字节大小
- C++在不同操作系统的基本数据类型字节大小(转)
- c++拾遗之数据类型占用内存大小总结
- 不同数值类型占用的字节数
- 不同数据类型变量在不同CPU或MCU下的内存占用情况还与编译器或编译选项有关
- java中类型占用内存大小
- 一张图:数据类型在不同位平台和编译器下sizeof的字节大小
- 看你的linux编译系统是32位还是64位最简单的方法以及不同数据类型占用字节个数