一、sizeof

sizeof(...)是运算符,sizeof操作符的结果类型是size_t。它在头文件里typedef为unsigned int类型。是以字节为单位进行计数的。所以位域成员不

能用sizeof进行计算。參数能够是数组、指针、类型、对象、函数等。

功能是:获得保证能容纳实现所建立的最大对象的字节大小。

因为在编译时计算。因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的

空间,返回值跟对象、结构、数组所存储的内容没有关系。

详细而言,当參数分别例如以下时,sizeof返回的值表示的含义例如以下:

数组——编译时分配的数组空间大小。

指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4 字节byte);

类型——该类型所占的空间大小。

对象——对象的实际占用空间大小。

函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

比如:

char a[] = "hello world";

char *p = a;

cout<< sizeof(a) << endl; // 12 字节

cout<< sizeof(p) << endl; // 4 字节

注意当数组作为函数的參数进行传递时。该数组自己主动退化为同类型的指针。

void Func(char a[100])

{

cout<< sizeof(a) << endl; // 4 字节而不是 100 字节

}


二、strlen

头文件:string.h

函数: int strlen(char *s);

格式:strlen
(字符数组名、指针。且必须是以'\0'结尾的)

功能:计算字符串s的(unsigned
int型)长度,不包含'\0'在内。

比如:

int
ac[10];

cout<<sizeof(ac)<<endl;(结果是40
 byte)

cout<<strlen(ac)<<endl;
(ac相当于一个指针,可是strlen仅仅能接受char*类型,所以编译时出错)

char
aa[10]={'\0'};

cout<<strlen(aa)<<endl;
//结果为0

class
X{ int i; int j; char k;};X x;

cout<<sizeof(X)<<endl;
结果 12 ===》内存补齐

cout<<sizeof(x)<<endl;
结果 12 同上

char
szPath[MAX_PATH]

假设在函数内这样定义。那么sizeof(szPath)将会是MAX_PATH,可是将szPath作为函数參数时。sizeof(szPath)却会是4(指针大小)

char ca1[] = {‘C’。'++' };

char ca2[] = {‘C’,'++'
,‘\0’};

故strlen(ca1)的值没有定义。而strlen(ca2)=2。

sizeof、strlen的更多相关文章

  1. sizeof、strlen、字符串、数组,整到一块,你还清楚吗?

    写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...

  2. 【转载】sizeof()、strlen()、length()、size()详解和区别

    c/c++中获取字符串长度.有以下函数:size().sizeof() .strlen().str.length();一.数组或字符串的长度:sizeof().strlen()1.sizeof():返 ...

  3. c/c++中关于sizeof、strlen的使用说明

    sizeof: 一般指类型.变量等占用的内存大小(由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小) strlen: c字符串的长度(参数必须是字符型指针 char*,当数组名作 ...

  4. C语言中sizeof、strlen函数的部分理解

    一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...

  5. C语言中sizeof与strlen区别

    本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...

  6. sizeof与strlen()、递归优化题解

    一.sizeof sizeof是C/C++中的一个操作符(operator),确切的说是一个编译时运算符,参数可以是数组.指针.类型.对象.函数等.用于统计类型或者变量所占的内存字节数.由于在编译时计 ...

  7. sizeof和strlen的区别

    一.sizeof    sizeof(...)是运算符,而不是一个函数.    sizeof操作符的结果类型是size_t,在头文件中typedef为unsigned int,其值在编译时即计算好了, ...

  8. Sizeof与Strlen的区别与联系

    转自:http://www.cnblogs.com/carekee/articles/1630789.html 一.sizeof    sizeof(...)是运算符,在头文件中typedef为uns ...

  9. Sizeof与Strlen的区别与联系(转)

    Sizeof与Strlen的区别与联系 一.sizeof     sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型 ...

随机推荐

  1. Go:json(序列化、反序列化)

    一.示例 package main import ( "encoding/json" "fmt" ) type Person struct { Name str ...

  2. python:零散记录

    1.rstrip()删除末尾指定字符串 例如:A = '1,2,3,4,5,' B = A.rstrip(',') B = '1,2,3,4,5' 2.isdigit()方法 Python isdig ...

  3. Python旅途——数据类型

    1.概要 ​ 今天跟大家分享的是数据类型,数据类型在Python中的重要程度就好比我们汉语中的拼音一样重要. 2.数据类型 1.整形 整形就像是数学中的1.2.3一样,用int来表示. a = 1 # ...

  4. Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)

    题意: 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物? 分析: 分类枚举, ...

  5. POJ 1949 Chores(DAG上的最长路 , DP)

    题意: 给定n项任务, 每项任务的完成用时t和完成每项任务前需要的k项任务, 求把所有任务完成的最短时间,有当前时间多项任务都可完成, 那么可以同时进行. 分析: 这题关键就是每项任务都会有先决条件, ...

  6. 关于自由拖拽完成的剪切区域(UI组件之图片剪切器)

    var x, y,areaWidth,areaHeight; var down;//闪光的判断标准,很好 addEvent(canvas,'mousedown',function(e){ // con ...

  7. 【Codeforces 1141E】Superhero Battle

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 二分最后轮了几圈. 二分之后直接o(N)枚举具体要多少时间即可. 注意爆long long的情况. 可以用对数函数,算出来有多少个0 如果大于 ...

  8. 大数据学习——有两个海量日志文件存储在hdfs

    有两个海量日志文件存储在hdfs上, 其中登陆日志格式:user,ip,time,oper(枚举值:1为上线,2为下线):访问之日格式为:ip,time,url,假设登陆日志中上下线信息完整,切同一上 ...

  9. 在C#代码中应用Log4Net系列教程(附源代码)地址

    在博客园看到一篇关于Log4Net使用教程,比较详细,感谢这位热心的博主 博客园地址:http://www.cnblogs.com/kissazi2/archive/2013/10/29/339359 ...

  10. POJ-1797Heavy Transportation,最短路变形,用dijkstra稍加修改就可以了;

    Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K          Description Background  Hugo ...