CC++中sizeof函数的用法
C/C++中sizeof()函数的用法
学习C/C++有时会遇到下面的情况:
已知 char *str1="absde";
char str2[]="absde";
char str3[8]={'a'};
char str4 [] = "0123456789";
为什么sizeof(str1)=4
sizeof(str2)=6;
sizeof(str3)=8;
sizeof(str4)=11;呢?
丈二和尚摸不着头脑,接下来我们一起好好讨论讨论,sizeof()到底是怎么一回事。
首先咱们说明一点,char类型变量在内存中占一个字节,所以sizeof(char)是1,
这点咱们学C/C++的应该很好理解。
str1是一个指针变量,它只是指向了字符串"absde"而已。
sizeof(str1)既不是字符串占的空间长度,也不是字符数组占的空间长度,
而是一个字符型指针占的空间,所以sizeof(str1)=sizeof(char*)=4(因为在C/C++中一个指针占4个字节)。
str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空间,
所以sizeof(str2)取得的是字符串"absde"占的总空间。
"absde"中,共有a b s d e \0六个字符,
所以str2数组的长度是6,所以sizeof(str2)=6*sizeof(char)=6。
str3已经定义成了长度是8的数组,所以sizeof(str3)为8。
str4和str2类似,'0' '1' ... '9'加上'\0'共11个字符,所以str4占的空间是11。
总之,对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;
而对于一个数组,sizeof返回这个数组所有元素占的总空间。
char*与char[]容易混淆,我们一定要分清,
而且char*="aaa"的写法现在不被提倡,应予以避免。
而strlen不区分是数组还是指针,就读到\0为止返回长度。
而且strlen是不把\0计入字符串的长度的。
为了进一步理解sizeof()、strlen()用法及两者的区别,您不妨亲自编写几个小程序,一试就明白了。
CC++中sizeof函数的用法的更多相关文章
- matlab中patch函数的用法
http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...
- mysql中INSTR函数的用法
mysql中INSTR函数的用法 INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) SELECT * FROM tblTo ...
- (转)解析PHP中ob_start()函数的用法
本篇文章是对PHP中ob_start()函数的用法进行了详细的分析介绍,需要的朋友参考下 ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行 ...
- Delphi中 StrToIntDef函数的用法
Delphi中 StrToIntDef函数的用法:比如我要判断一个文本框里输入的字符串能不能转换为integer类型,如果能,则返回转换后的整型数据,如果不能,则返回整数0,那么我就可以用strtoi ...
- Python中int()函数的用法浅析
int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int) Help on class int in module __builti ...
- matlab中repmat函数的用法(堆叠矩阵)
matlab中repmat函数的用法 B = repmat(A,m,n) B = repmat(A,[m n]) B = repmat(A,[m n p...]) 这是一个处理大矩阵且内容有重复时使用 ...
- Oracle 中 CONTAINS 函数的用法
Oracle 中 CONTAINS 函数的用法 1. 查询住址在北京的学生 SELECT student_id,student_name FROM students WHERE CONTAINS( a ...
- Matlab中imfilter()函数的用法
Matlab中imfilter()函数的用法 功能:对任意类型数组或多维图像进行滤波.用法:B = imfilter(A,H) B = imfilter(A,H,option1,option2,... ...
- 自动加载类PHP中spl_autoload_register函数的用法
spl_autoload_register(PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明bool spl_autoloa ...
随机推荐
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
STL中的二分查找函数 1.lower_bound函数 在一个非递减序列的前闭后开区间[first,last)中.进行二分查找查找某一元素val.函数lower_bound()返回大于或等于val的第 ...
- wget: unable to resolve host address “http”
[root@one ~]# wget www.baidu.com --2017-09-24 10:20:23-- http://www.baidu.com/ Resolving http... fai ...
- cn_office_professional_plus_2010_x86_515 安装激活方法解决方案64bit
一:首先选择 Office 2010 Toolkit.exe 右键 选择属性 –兼容性 然后 选择以管理员身份运行此程序 然后 双击 Office 2010 Toolkit.exe 需要安装的工具及 ...
- VIMTUTOR 1.7中文版
文章来源:http://waterxfire.blog.hexun.com/4106986_d.html =============================================== ...
- Javascript自动打开匹配的超链接
可以用来点击广告.... 部分代码: function AutoClick() { var DivLink=document.getElementById("divLink"); ...
- 运行docker image 忘记添加端口号
docer inspect 容器id,查找IpAddress ,通过这个访问
- dom树改变监听
function unwrap(el, target) { if ( !target ) { target = el.parentNode; } while (el.firstChild) { tar ...
- PHP 实现Session入库/存入redis
对于大访问量的站点使用默认的Session 并不合适,我们可以将其存入数据库.或者使用Redis KEY-VALUE数据存储方案 首先新建一个session表 CREATE TABLE `sessio ...
- [转]GStreamer资料(摄像头采集,视频保存,远程监控)DVR
http://blog.csdn.net/wzwxiaozheng/archive/2010/12/26/6099397.aspx GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒 ...
- python的对象类型-----列表&元组&字典
列表: #定义列表 l=[1,'a',[3,4]] #l=list([1,'a',[3,4]]) #取值 print(l[0]) print(l[2][0]) l=[1,2,[['a','b'],'c ...