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 ...
随机推荐
- Python实现下载进度
# encoding:utf-8 import urllib import os def Schedule(a,b,c): ''''' a:已经下载的数据块 b:数据块的大小 c:远程文件的大小 '' ...
- spring cloud 使用feign 遇到问题
spring cloud 使用feign 项目的搭建 在这里就不写了,本文主要讲解在使用过程中遇到的问题以及解决办法 1:示例 @RequestMapping(value = "/gener ...
- Python API:openstack
OpenStack 是一个越来越流行的.用于部署基础架构即服务 (IaaS) 云的开源解决方案.OpenStack 附带了一个仪表板 Web 应用程序,非常适合执行手动任务,比如启动单个虚拟机 (VM ...
- If you ever have a broken heart
If you ever have a broken heart Pablo Neruda Tonight i can write the saddest lines Write ,for exampl ...
- javascript;json数据,js转换日期方法。
接收json数据,日期格式为:"\/Date(1414078309687)\/" var value = "/Date(1414078309687)/"; va ...
- 安装MySQL的详细步骤
安装步骤如下: 1.打开网址:http://www.mysql.com/ ↓ 2.选择“Download”->“Windows”(此安装步骤只是在Window10 中进行,如有需要,其他系统可参 ...
- 021_在Eclipse Indigo中安装插件hadoop-eclipse-plugin-1.2.1.jar,直接运行wordcount程序
1.工具介绍 Eclipse Idigo.JDK1.7-32bit.hadoop1.2.1.hadoop-eclipse-plugin-1.2.1.jar(自己网上下载) 2.插件安装步骤 1)将ha ...
- sublime text3自动同步左边栏颜色背景为编辑栏颜色
下面的步骤需要安装Package Control插件,如果你已经安装,可跳过本步骤,直接看第二步. 第一步:安装Package Control插件: 按Ctrl+`调出console(注:安装有QQ输 ...
- zookeeper部署搭建
zookeeper教程 1.先在linux系统中安装jdk并配置环境变量,可以参考下面的链接1 2.下载安装zookeeper软件 教程参考: 链接1:http://www.linuxidc.com/ ...
- python中编写无参数decorator
Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数. 使用 decorator 用Python提供的 @ 语法,这样可以避免手动编写 f = de ...