sizeof、strlen
一、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;
//结果为0class
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的更多相关文章
- sizeof、strlen、字符串、数组,整到一块,你还清楚吗?
写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...
- 【转载】sizeof()、strlen()、length()、size()详解和区别
c/c++中获取字符串长度.有以下函数:size().sizeof() .strlen().str.length();一.数组或字符串的长度:sizeof().strlen()1.sizeof():返 ...
- c/c++中关于sizeof、strlen的使用说明
sizeof: 一般指类型.变量等占用的内存大小(由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小) strlen: c字符串的长度(参数必须是字符型指针 char*,当数组名作 ...
- C语言中sizeof、strlen函数的部分理解
一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...
- C语言中sizeof与strlen区别
本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...
- sizeof与strlen()、递归优化题解
一.sizeof sizeof是C/C++中的一个操作符(operator),确切的说是一个编译时运算符,参数可以是数组.指针.类型.对象.函数等.用于统计类型或者变量所占的内存字节数.由于在编译时计 ...
- 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,其值在编译时即计算好了,参数可以是数组.指针.类型 ...
随机推荐
- 组管理命令--groupadd.groupmod.groupdel.gpasswd
添加用户组 格式 groupadd [参数] 组名 参数选项 -g GID:指定新组的GID,默认值是已有的最大的GID加1.-r:建立一个系统专用组,与-g不同时使用时,则分配一个1-499的GID ...
- <a>标签的href 与 onclick 使用
链接的onclick 事件被先执行,其次是href属性下的动作(页面跳转,或 javascript 伪链接): 假设链接中同时存在href 与onclick,如果想让href 属性下的动作不执行,on ...
- python书籍推荐:量化投资:以Python为工具
所属网站分类: 资源下载 > python电子书 作者:mimi 链接:http://www.pythonheidong.com/blog/article/451/ 来源:python黑洞网 内 ...
- 我的Python分析成长之路1
Python是什么? ...
- 慕课网 微信小程序商城构建全栈应用 tp5【总结】
1.异常处理: [代码越抽象,复用性越高] [封装性越好,适应代码变化的能力越强] [] <?php/** * Created by PhpStorm. * User: 14155 * Date ...
- LINUX常用文件说明
一.网络配置 1.修改主机名 /etc/sysconfig/network或/etc/hosts 2.开启或关闭网卡 ifconfig eth0 down/up 3.linuxa下查看一个网卡绑定的所 ...
- Backspace doesn't delete inner html tags of a contenteditable DIV in Firefox
https://bugzilla.mozilla.org/show_bug.cgi?id=439808 backspace键 在ff下不能使用 div contenteditable=true时
- iframe in ipad safari
http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebconten ...
- C# 判断字符串为空的4种方法及效率
在程序开发过程中,少不了要处理字符串,并且常常要判断字符串是否为空,通常有哪些判断方法,以及不同方法的效率又怎么样? 在 C# 中,通常有三种判断字符串是否为空的方法,下面分别探讨. 1.str.Le ...
- NYOJ301-递推求值
递推求值 nyoj上矩阵专题里的10道题水了AC率最高的5道,惭愧,还不是完全自己写的,用了几乎两周的时间.模板题我是有自信写出来的,但对于高级一点的矩阵构造,我还是菜的抠脚. 这题感谢MQL大哥和她 ...