- 浏览: 31948 次
- 性别:
- 来自: 南京
文章分类
最新评论
1. sizeof的概念:
sizeof是C的一种单目运算符,它以字节形式给出了它的操作数的存储大小。操作数可以是一个表达式或者括起来的数据类型。操作数的存储大小由操作数的类型决定。
2. sizeof的使用方法:
sizeof用于变量可以不带括号,也可以带括号,但是用于类型必须带括号;sizeof不能用于函数类型,不完全类型和位字段。不完全类型是指具有位置存储大小的类型,如未知大小的数组类型,未知内容的结构或联合,void类型等。
3. sizeof和strlen的比较:
1) sizeof是运算符,strlen是函数
2) sizeof操作符的结果类型是size_t
3) sizeof可以用类型做参数,而strlen只能用char *做参数,而且必须以'\0'结尾。
4) 数组做sizeof的参数不退化,而做strlen的参数就退化为指针。( C的一个特性:将数组作为参数传递给函数时,数组符合自动退化为指向该数组的指针。注意sizeof是运算符,而不是函数)
5) 大多数编译程序在编译时就已经将sizeof计算出来了,这也是为什么可以使用sizeof(x)定义数组大小的原因。
6) strlen的结果要在运行时才能计算出来。它是用来计算字符串长度的,而不是用来计算类型占内存的大小。
4. 经典问题:
double *(*a)[3][6];
cout<<sizeof(a)<<endl; //4 a为指针 cout<<sizeof(*a)<<endl;//72 *a为一个有3*6个指针元素的数组 cout<<sizeof(**a)<<endl;//24 **a为数组一维德6个指针 cout<<sizeof(***a)<<endl;//4 ***a为一维的第一个指针 cout<<sizeof(****a)<<endl;//8 ****a为一个double变量
5. 下面的程序输出:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; struct{ short a1; short a2; short a3; }A; struct{ long a1; short a2; }B; int main() { char* ss1 = "0123456789"; char ss2[] = "0123456789"; char ss3[100] = "0123456789"; int ss4[100]; char q1[] = "abc"; char q2[] = "a\n"; char* q3 = "a\n"; char * str1 = (char*)malloc(100); void * str2 = (void*)malloc(100); cout<<sizeof(ss1)<<endl;//4 指针大小固定 cout<<sizeof(ss2)<<endl;//11 10字节加上隐含的'\0' cout<<sizeof(ss3)<<endl;//100 预分配 cout<<sizeof(ss4)<<endl;//400 预分配,但int占4字节 cout<<sizeof(q1)<<endl;//4 3+1('\0') cout<<sizeof(q2)<<endl;//3 2+1 cout<<sizeof(q3)<<endl;//4 指针大小固定 cout<<sizeof(A)<<endl;//6 2*3 cout<<sizeof(B)<<endl;//8 4+2扩展到8(32位机的long为4byte) cout<<sizeof(str1)<<endl;//4 指针大小固定 cout<<sizeof(str2)<<endl;//4 。。。。。 return 0; }
结构体的大小问题(数据对齐):
在默认情况下,为了方便结构体内的元素的访问和管理,当结构体内的元素的长度都小于处理器的位数的时候,以便结构体里面最长的数据元素为对其单位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在长度大于处理器位数的元素,那么就以处理器的位数为对其单位。但是结构体内类型相同的连续元素将在连续的空间内,和数组一样。
结构体默认的字节对齐一般满足三个原则:
1)结构体变量的首地址能够被其最宽基本类型成员变量的大小所整除;
2)结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如果有需要编译器会在成员之间加上填充字节;
3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如果有需要编译器会在最末一个成员之后加上填充字节。
发表评论
-
C++强制类型转换
2010-09-29 23:50 808C++同时提供了四种新的 ... -
拷贝构造函数和赋值函数
2010-09-29 20:04 827-- C++中拷贝构造函数被调用的三种情形 1) 一个对象 ... -
构造函数和析构函数
2010-09-29 19:17 654-- 析构函数可以为virtual类型,而构造函数则不能。构造 ... -
scanf
2010-09-29 10:57 619scanf -
定义&赋值&初始化
2010-09-18 23:26 771定义一个变量,就是分配一块存储空间并给它命名; 给一个变量赋值 ... -
“连接”相关细节
2010-09-18 19:42 614在一个执行程序中,标识符代表存放变量或者被编译过的 ... -
内联函数
2010-09-18 17:12 805在C++中,宏的概念是作为内联函数来实现的。 ... -
C++虚函数机制
2010-09-18 15:29 1087典型的编译器 ... -
引用的相关重点
2010-09-18 15:15 603引用的主要用途是为了描述函数的参数和返回值,特别是 ... -
虚继承的构造函数调用问题
2010-09-18 14:27 2200在某一个虚基类的任何 ... -
动态联编与静态联编
2010-09-18 14:23 812#include <iostream> ... -
static在不同地方的含义
2010-09-18 13:52 8441. 源文件中定义函数使用的static表示的是访问权限:只有 ... -
头文件中的名字空间
2010-09-18 13:41 736不要在头文件中放置使用指令,使用指令的通常形式是: using ... -
为什么不能通过返回值重载
2010-09-18 13:33 1138为什么只能通过范围和参数来重载,而不能通过返回值呢? ... -
编译C程序的详细过程
2010-09-16 00:04 718编译的概念:编译程序 ... -
标准I/O库
2010-09-15 23:58 628标准I/O库及其头文件stdio.h为底层I/O系统提供了一个 ...
相关推荐
都是在网上下载资料,然后自己整理而成。详细的介绍了strlen和sizeof的区别和用法,这在应用程序是,有很高的帮助。
笔试题,关于sizeof的一些运算。。。。。
主要介绍了sizeof的概念以及相关用法,我辛辛苦苦找的,希望对大家有所帮助
printf(“%d\n”, sizeof(i++)); printf(“%d\n”, i); return 0; }这三行输出应该是什么?答案是:10410第三个为什么不是11? i为什么没有自增?请看C++标准;5.3.3 sizeofThe sizeof operator yields the ...
本篇文章是对一个关于sizeof用法的题目进行了详细的分析介绍,需要的朋友参考下
这是 Scala/Java 的内存消耗估算器。 这个库是从项目移植的。 依赖 ###Sbt libraryDependencies += "com.madhukaraphatak" %% "java-sizeof" % "0.1" 2.10 和 2.11 都支持。...有关更多示例,请查看示例文件夹。
产生与 char 类型的大小有关的操作数大小。 语法 sizeof unary-expression sizeof ( type-name ) 备注 sizeof 运算符的结果为 size_t 类型,它是包含文件 STDDEF.H 中定义的整数类型。利用此运算符,你可以避免在...
主要介绍了C/C++ 中sizeof('a')的值对比详细介绍的相关资料,需要的朋友可以参考下
主要介绍了C++ sizeof的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
主要介绍了C++ sizeof的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
主要介绍了C语言位运算和sizeof运算符详解的相关资料,这里提供了详细的知识要点,并附简单代码示例,需要的朋友可以参考下
主要给大家介绍了关于C语言中sizeof函数的基本使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
#sizeOf() - Droid 有关此项目的更多信息,请访问文档存储库。 ##生成用于处理的数据集 在接下来的几天里,这个过程将变得更加容易。 要生成数据集,请执行以下操作: 拿一根米尺或卷尺和一些要关注的东西 打开...
不仅对传统的C系语言考点做了详尽的解说,包括面向对象问题、sizeof问题、const问题、数据结构问题等。还根据外企出题最新特点,针对设计模式问题、C#问题、网络问题、数据库问题、NET问题等,做了深入的说明。 ...
不仅对传统的C系语言考点做了详尽的解说,包括面向对象问题、sizeof问题、const问题、数据结构问题等。还根据外企出题最新特点,针对设计模式问题、C#问题、网络问题、数据库问题、NET问题等,做了深入的说明。, ...
memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,'\n'); for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t; } cout; } //第二种 string str; cin>>str; str.replace; ...
主要介绍了C++无法重载点符号、::、sizeof等的原因的相关资料,需要的朋友可以参考下
《你必须知道的495个C语言问题》结构清晰,讲解透彻,是各高校相关专业C语言课程很好的教学参考书,也是各层次C程序员的优秀实践指南。 -----------------------------------------------------------------------...
3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? 3.6 可是&&和||操作符呢?我看到过类似while((c=getchar())!=EOF&&c!='\n')的代码……...
中文名: 你必须知道的495个C语言问题 高清PDF中文版 原名: C Programming FAQs 作者: (美)萨米特译者: 孙云 朱群英资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社书号: 9787115194329发行时间: 2009年02月01日 ...