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 ...
随机推荐
- Python3.6全栈开发实例[024]
24.文件a1.txt内容(注意每行中的空格是不一样的,需要对空格进行处理)序号 部门 人数 平均年龄 备注 1 python 30 26 单身狗 2 Linu ...
- 我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页
因为要做图表相关的应用,后来百度发现了一个很好的Android开源图表库(XCL-Charts is a free charting library for Android platform.) 下面 ...
- 8.22 ps课堂练习
真是做得超烂!以前学的快忘光了!
- OpenGL学习进程(5)第三课:视口与裁剪区域
本节是OpenGL学习的第三个课时,下面介绍如何运用显示窗体的视口和裁剪区域: (1)知识点引入: 1)问题现象: 当在窗体中绘制图形后,拉伸窗体图形形状会发生变化: #include ...
- 0731 #Django rest framework
FBV:Function base viewsdef index(request): if request.method == 'POST': return HTTPrespons ...
- 在IOS开发中,项目的目录结构如何搭建?
网上有很多关于IOS开发的学习资料.然而却很少有关于设计一个项目时,如何设计其目录结构?这对于自学IOS的程序猿们,无疑有诸多不利.接下来,我就简单的谈下真正在公司中,项目的目录结构如何搭建: 以上为 ...
- strspn() 和 strcspn() 函数【转】
本文转载自:https://flyer103.wordpress.com/2011/06/03/strspn-%E5%92%8C-strcspn-%E5%87%BD%E6%95%B0/ 前几天在看一本 ...
- CentOS 7 导入epel库
yum install epel-release 或者到百度云下载相应的 rpm 包进行安装 rpm -ivh epel-release-7-9.noarch.rpm
- 吴恩达深度学习笔记(五) —— 优化算法:Mini-Batch GD、Momentum、RMSprop、Adam、学习率衰减
主要内容: 一.Mini-Batch Gradient descent 二.Momentum 四.RMSprop 五.Adam 六.优化算法性能比较 七.学习率衰减 一.Mini-Batch Grad ...
- 修改redhat默认显示语言为中文
[delmore@localhost Desktop]$ su //切换到最高权限 Password: ...