C语言里的sizeof关键字用于返回变量的类型宽度(变量所占的字节个数)。例如:

#include <stdio.h>

int main() {

int i = 0;

int size = sizeof i;

printf("size of i is: %d",size);

return 0;

}

会在控制台打印出int类型的变量i在内存中所占的字节的个数。我机器上的执行结果是:

size of i is: 4

从上面这个例子看,sizeof蛮好用的,同时你可能觉得以后你需要知道类型宽度的时候,你也不会用错。但是你想得太简单了,sizeof是有坑的,你很可能栽进去也不知道,程序有问题找不出来。

下面看看sizeof到底有什么坑爹的地方。

先举个例子,看看下面的程序的执行结果是什么?

#include <stdio.h>

int get_sizeof(char a[]) {

return sizeof a;

}

int main() {

int size = -1;

char a[] = "123456789"

size = sizeof a;

printf("size of a is: %d\n",size);

size = get_sizeof(a);

printf("size of a is: %d\n",size);

return 0;

}

估计出乎你的意料,执行结果竟然是:

size of a is: 10

size of a is: 4

为什么同样是使用sizeof运算符,只不过一个直接使用,另一个通过函数包装了一下,为什么结果就不一样了呢?

别怀疑编译器,编译器没错,这最多算是比较坑爹,原因很简单,在调用get_sizeof函数的时候,函数内部把参数a作为一个指针对待,而指针在内存中占4个字节的长度。对于函数内部声明的字符数组变量,它才会把它作为一个字符数组对待。

所以返回的是4。这里建议你不要抬杠,C语言就是这样的,它的规矩就是这么定的,说什么也没有用。除非哪一天你下定决心不再用C语言,这个折磨人的事情你就不用再承受。

总结起来是这样的,你死死记住就行了,别太深究:

当对一个字符数组变量做sizeof运算的时候,分为以下两种情况:

1、当这个变量是作为参数传入函数内部的话,C语言会认为这只是一个指针变量,做sizeof运算返回的将是一个指针在内存中所占的字节数。

2、其他情况,这时C语言会把该变量当成一个字符数组,做sizeof运算返回的将是字符数组的长度(包括\0在内)。

转载于:https://www.cnblogs.com/look4liming/p/3702207.html

坑爹系列:sizeof运算符相关推荐

  1. C++ sizeof 运算符的使用

    sizeof  是C++ 中 唯一的一个带字母的运算符, sizeof 的功能: 返回指定的数据类型或者表达式值的数据类型在内存中所占的字节数. sizeof  运算符的使用 1 sizeof(类型) ...

  2. c++中利用sizeof运算符计算结构体大小问题探讨

    c++中提供的sizeof运算符可以方便得计算出内置类型的字节数大小,比如sizeof(int),sizeof(char),sizeof(double)的返回值分别为4,1,8,这是很容易理解的.但是 ...

  3. python sizeof函数_C++ sizeof 运算符 | 菜鸟教程

    C++ sizeof 运算符 sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小. sizeof 运算符可用于获取类.结构.共用体和其他用户自定义数据类型的大小. 使用 ...

  4. C语言sizeof运算符

    C语言并没有规定各种类 占用存储空间的大小,而是根据操作系统的位数来确定 同一种数据类型,在不同的编译系统中所占空间不一定相同 比如,在16位的编译系统中,int类型占用2个字节,而在32位的编译系统 ...

  5. c语言 sizeof size_t,C/C++中的sizeof运算符和size_t类型的详解

    sizeof的作用 sizeof是c的运算符之一,用于获取操作数被分配的内存空间,以字节单位表示. 这里指的操作数,可以是变量,也可以是数据类型,如int,float等.所以就可以通过它来获取本地c库 ...

  6. sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...

  7. C语言指针、数组与sizeof运算符

    指针.数组与sizeof运算符 指针.数组与sizeof运算符 指针.数组与sizeof运算符 Sizeof是C语言的一个运算符,sizeof的作用是用来返回()里面的变量或者数据类型占用的内存字节数 ...

  8. C++ Prime:sizeof运算符

    sizeof运算符的结果部分地依赖于其作用的类型: 对char或者类型为char的表达式执行sizeof运算结果得1: 对引用类型执行sizeof运算得到被引用对象所占空间的大小: 对指针执行size ...

  9. sizeof运算符运算结果小汇

    文章目录 sizeof运算符的结果部分地依赖于其作用的类型 sizeof运算符的结果部分地依赖于其作用的类型 对char或者类型为char的表达式执行sizeof运算,结果得1 对引用类型执行size ...

最新文章

  1. “黑客”一年能赚多少钱?
  2. React Native Expo开发的OW移动端项目
  3. Fuel 30 分钟快速安装OpenStack
  4. 步步为营-19-正则表达式的简单应用
  5. 《剑指offer》-整数中1出现的次数
  6. 【文末福利】算法大赛评委共话技术趋势,这场直播值得一看!
  7. java系统缓存应用_著名java开源缓存系统 【zz】
  8. windows文件搜索工具 Everything
  9. Windows搭建Sosoapi
  10. vue-codemirror 代码编辑器
  11. 【微信公众号】2、申请微信公众平台接口测试帐号
  12. 两种方法分析每月工作日计算程序
  13. 万字讲解WiFi为何物
  14. SRE问题排查四步法——以建立HTTPS连接失败问题排查为例
  15. 大白菜备份还原linux,大白菜pe手动gho镜像还原,大白菜制作ghost镜像
  16. 基于单片机干湿垃圾自动分类系统-毕设课设资料
  17. android 播放 优酷视频
  18. input触发的事件触发流程
  19. 大公司研发部门普遍存在的问题(日常吐槽)
  20. 美化上传文件框(上传图片框)

热门文章

  1. sql server数据库还原备份 sql语句
  2. layui按条件开启关闭编辑列
  3. jenkins修改pom文件_jenkins参数化配置,pom.xml配置
  4. AcWing提高算法课Level-3 第四章 高级数据结构
  5. 2020 年百度之星·程序设计大赛 - 初赛一 Dec 二维DP,预处理
  6. JavaScript数组的声明及使用(1)
  7. 们--加强菲波那切数列
  8. windows ftp服务器_ftp是什么意思,在windows系统安装ftp只需3步
  9. pyinstaller下载_《快速掌握PyQt5》第二十五章 Pyinstaller打包
  10. RayMarching2:给球加上光照