sizeof()和strlen()
sizeof计算的是栈中大小
P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify }
P.western { font-family: "Times New Roman", serif; font-size: 10pt }
P.cjk { font-family: "宋体", "SimSun"; font-size: 10pt }
P.ctl { font-family: "Times New Roman", serif; font-size: 12pt }
sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小
首先解释下sizeof和strlen之间的区别。
sizeof是一个运算符,其类型结果为size_t,可以用类型做参数,比如在定义一个结构体之后,获得结构体空间大小sizeof(struct )。并且最重要的是sizeof返回的是变量、结构等的实际大小,并且在计算结构体时要注意对其问题。
strlen首先是一个函数,只能以char * 做参数,返回的是字符的实际长度,不是类型占内存的大小。其结果是运行的时候才计算出来的。
下面给出相关例子进行解释说明。
1、 char * s = “0987654321”;
那么sizeof(s)是多少?sizeof(*s)呢?strlen(s)呢?
sizeof(s)结果为4,因为s是指向char类型的指针。
sizeof(*s)结果为1,可以简单看为char(*s)。
strlen(s)结果为10.为实际字符串长度。
2、int a[100] = "0987654321";
那么sizeof(a)是多少?strlen(a)呢?
sizeof(a)结果为400. 100*4.
strlen(a)结果为10,也许你会这么认为。这里要注意strlen只能以char * 做参数,所以这里是错误的表达。
3、struct { struct {
short a; long a;
short b; short b;
short c; char c;
}A; }B;
那么sizeof(A)和sizeof(B)结果分别为多少?
结构体A中的数据类型都是相同的类型,都以2字节对齐,所以sizeof(A)是6字节。
结构体B中有long:4字节、short:2字节、char :1字节。那么结构体以最长的4字节对其,那么sizeof(B)就是4*3=12喽。不是。在第一个long之后,编译器将short和char放到一块窒执行内存对齐,所以这里结果应该为8字节。
4、class A class B
{ {
public: public:
int a; double a;
static int b; float b;
int c;
A(); char d;
~A(); B();
}; ~B();
};
那么sizeof(A)和sizeof(B)结果为多少?
根据之前的分析可以很容易得出sizeof(A)结果为8字节,如果这么想就错了!!!!!!这里的int b是静态变量,那么静态变量存放在哪里?静态变量存放在数据段,而sizeof计算的是栈中大小,所以sizeof(A)结果为4字节.
类B以8字节对齐,结果为24字节。
5、char var[10]
int test(char var[])
{
return sizeof(var)
};
其结果为多少?这里的var[]已经转换为*var了,所以结果为4字节。
6、class B
{
float a;
char b;
int c[3];
};
那么sizeof(B)为多少。
这里是以4字节对齐的,所以结果为4+4+4*3=20字节。
sizeof()和strlen()的更多相关文章
- sizeof、strlen、字符串、数组,整到一块,你还清楚吗?
写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...
- sizeof和strlen的区别
一.sizeof sizeof(...)是运算符,而不是一个函数. sizeof操作符的结果类型是size_t,在头文件中typedef为unsigned int,其值在编译时即计算好了, ...
- Sizeof与Strlen的区别与联系
转自:http://www.cnblogs.com/carekee/articles/1630789.html 一.sizeof sizeof(...)是运算符,在头文件中typedef为uns ...
- Sizeof与Strlen的区别与联系(转)
Sizeof与Strlen的区别与联系 一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型 ...
- sizeof 和 strlen 的区别
sizeof 和 strlen 都是c/c++ 中常见的符号,他们的功能是判断数组长度.那么他么到底有什么区别 1.sizeof 不是函数,而是一个操作符.字节数的计算在程序编译时进行,而不是在 ...
- C++-sizeof和strlen的区别
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- sizeof 和 strlen 区别
Sizeof与Strlen的区别与联系 一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型. ...
- sizeof()与strlen()的区别
首先需要说明的是sizeof和strlen都可以求长度,但是却有很大的区别,简单来说可以概括为以下几点: 1.sizeof是一个关键字,而strlen确实一个函数. 2.sizeof求的是字节长度,而 ...
- sizeof和strlen小结
sizeof和strlen小结 写在前面 之所以要总结一下sizeof和strlen的用法和区别,是因为这些知识可以帮助我们更加深入的理解各种数据结构在内存中的占用情况,也许表面上看好像没有多大用处, ...
随机推荐
- java基础学习总结——基础语法2
一.语句
- win commands
wmic process where name="explorer.exe" delete 我想你问得应该是运行命令吧!我查了,没有,你自己参考一下:Windows常用命令集 wi ...
- iOS CAShapeLayer记录
基本知识 看看官方说明: /* The shape layer draws a cubic Bezier spline in its coordinate space. * * The spline ...
- js基础细节
js细节 1.所有的全局变量都是window的属性. 语句 var a=1; 等价于 window.a=1; 用 "变量名称" in window 来验证全局变量是否声明. 2.所 ...
- ETL的数据来源,处理,保存
1.ETL 数据来源:HDFS 处理方式:Mapreduce 数据保存:HBase 2.为什么保存在Hbase中 数据字段格式不唯一/不相同/不固定,采用hbase的动态列的功能非常适合 因为我们的分 ...
- backbone event 事件订阅 和发布 源码小读
nodejs有eventEmitter 类,想到backbone 有个event模块 可以对对象做事件绑定和触发,是backbone的核心模块. backbone event模块 on 添加自定义事 ...
- Xunsearch迅搜(基于 xapian+scws 的开源中文搜索引擎)安装与简单使用
今天鼓捣了xunsearch,感觉官方指南写得挺详细,于是按照指南一步一步走,但是感觉越看越凌乱,像看API一样,新手看得特费劲,网上也少有新手教程,于是略过今天的歪路,记录一下我的安装步骤. Xun ...
- lua module package.seeall选项
module 与 package.seeall http://blog.codingnow.com/2006/02/lua_51_module.html 使用 module("test&qu ...
- ligerui_ligerTree_007_ligerTree动态加载节点
ligerui:ligerTree:动态加载节点: 源码地址:http://download.csdn.net/detail/poiuy1991719/8571255 效果图: 代码:json.txt ...
- CAN总线抓包
马六: 由此可见, 马6的7e9跟7e8反馈的数据差不太多. 而标志508反馈的情况则不同, 波箱跟发动机反馈完全不同: 宝马3的数据如下: 证明宝马也有7e8跟7ec, 但是貌似7e8是主流啊... ...