C语言中的sizeof是一个很有意思的关键字,经常有人用不对,搞不清不是什么。我以前也有用错的时候,现在写一写,也算是提醒一下自己吧。反正现在来看,还在搞sizeof是什么意思,怎么用正确,还是有点搞笑,都经常用的东西,没有理解透彻,就差的太远了。

第一  sizeof是什么

sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等,sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。这个操作数不好理解对吧?后面慢慢看就明白了。sizeof的返回值是size_t,在64位机器下,被定义为long unsigned int。

第二 sizeof如何使用

1、用于数据类型

使用形式: sizeof(type)。其中type如int 、double等。 例如sizeof(int)、sizeof(char*)、sizeof(double)。这个时候sizeof后面的类型必须用括号()包起来,不包起来是错误的,通过不了编译。其中sizeof(void*)在64位下是8,而sizeof(void)是1。其实,在C语言中sizeof(函数),如sizeof(main),结果也是1。但是在C++中,sizeof(void)和sizeof(函数)都是非法的,通过不了编译,后面C++就不说了,现在讲C嘛。其实sizeof(函数),sizeof(void)虽然是1,但是是不正确的使用方式。

2、用于变量

使用形式: sizeof(var)或sizeof var。当操作基本数据类型的时候,在我64位电脑的结果如下

sizeof(char) 1

sizeof(char) 1

sizeof(short) 2

sizeof(int) 4

sizeof(long) 8

sizeof(float) 4

sizeof(double) 8

sizeof(long double) 16

sizeof(int*) 8

sizeof('a') 4

sizeof(1) 4

sizeof(1.0f) 4

sizeof(1.0) 8

sizeof "abc" 4其中sizeof('a') 4有点奇怪哈。

当操作数是联合类型时,sizeof是其最大字节成员的字节数。当操作数是结构类型时,sizeof是其成员类型的总字节数,包括补充字节在内。如下:

union  U

{

char c;

double d;

}U;

sizeof(U) = max(sizeof(c),sizeof(d)) = sizeof(1,8) = 8;

而sizeof结构体的时候,还要考虑对齐的问题:

struct S

{

char c;

double d;

}s;在我的电脑上,sizeof(s)的大小是16。

基本上说的比较清楚了,但有些时候和函数参数相关的时候,还是要注意,比如

int calc(char a[10])

{

printf("%d\n",sizeof(a));

return 0;

}

int main()

{

char a[10]={"hello"};

calc(a);

return 0;

}打印的结果是8,而不是10,这个是要注意的。

c语言中sizeof结构体,C语言中的sizeof用法相关推荐

  1. 内存对齐的原理,作用,例子以及一些规划(中英文说明,适用sizeof结构体) ...

    目录   题记  一  内存读取粒度   Memory access granularity   从内存的角度解释内存对齐的原理   队列原理 Alignment fundamentals   Laz ...

  2. c语言箭头指针的作用,C语言中,结构体成员变量的点和箭头

    C语言中,调用成员变量用点还是用箭头,取决于当前的ID是指针还是结构体本身. 如:typedef struct { float height; float weight; } Person; int  ...

  3. C# 中 System.Index 结构体和 Hat 运算符(^)的全新用法

    翻译自 John Demetriou 2019年2月17日 的文章 <C# 8 – Introducing Index Struct And A Brand New Usage For The ...

  4. c语言如何为结构数组赋值,C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include struct student { int a; int b ; int c ; }; stru ...

  5. sizeof结构体指针

    #include "stdio.h" typedef struct test_t{int a;int b;int c;int d; }mytest; int main() {myt ...

  6. sizeof与offsetof有关的结构体详解

    sizeof与offsetof在程序中经常遇到,但在面试中其应用使得许多小伙伴吃闭门羹,被面试官问得哑口无言.接下来对两者的应用做详细介绍. 关于sizeof 定义 sizeof乃C/C++中的一个操 ...

  7. c语言获取结构体大小sizeof,C语言sizeof求结构体数组长度

    C语言sizeof求结构体数组长度 C语言sizeof求结构体数组长度 #include typedef struct ss{ char a;//偏移量为0,大小为1,0能被1整除,=1 short ...

  8. sizeof求值问题(结构体,数组,联合体,指针,函数)

    结构体的sizeof 结构体的sizeof涉及到字节对齐问题. 为什么需要字节对齐?计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了.为此,编译器默认会对结构体进行处理(实 ...

  9. Go 学习笔记(14)— 结构体定义、实例化、初始化、匿名结构体、结构体访问、结构体作为形参、结构体指针

    Go 语言中没有 "类" 的概念,也不支持 "类" 的继承等面向对象的概念.Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法. 1. 结 ...

最新文章

  1. 现场丨李开复、李飞飞等大佬集聚达沃斯,解读中国的AI优势
  2. 逆向工程、软件后门……原来美剧《硅谷》里藏着这么多知识点
  3. redis作为hibernate的二级缓存
  4. Idea问题:“marketplace plugins are not loaded”解决方案
  5. 职高计算机自我鉴定800字,中专生自我鉴定800字与中专生计算机专业自我鉴定汇编...
  6. 一觉醒来,借呗竟然被封了
  7. 使用 jQuery Mobile 与 HTML5 开发 Web App (十八) —— HTML5 Web Workers
  8. 烟台大学计算机学院宋宜斌教授,宋宜斌
  9. 打表找规律-灯泡状态数
  10. 如何使用UIAutomation进行iOS 自动化测试(Part II)
  11. PHP non-thread-safe和thread-safe这两个版本的区别
  12. 【C语言】开平方公式,根号下x的函数使用:sqrt()
  13. 50道逻辑编程小题目
  14. 【原】使用IPV6,nbsp;10M/s高速BT互传…
  15. FU-A STAP-A
  16. 计算机word排版素材,WORD基础排版素材
  17. 重庆链家租房数据分析
  18. VB对IE浏览器完全控制
  19. 怎样更换手机壁纸?2022更换手机壁纸软件大全
  20. 部署 PXE 远程安装与无人值守安装服务

热门文章

  1. 广东大爷10栋房收租,外卖小哥为5块钱崩溃大哭:成人世界是你想不到的心酸...
  2. CAD中怎么倒角?CAD倒角快捷键使用技巧
  3. 蓝桥杯单片机组——榨干选手资源包(芯片数据手册)
  4. 专业的iPhone/iPad解锁工具:Tenorshare 4uKey中文版
  5. 从Minio断点续传资源,支持边下载边看
  6. android 输出到屏幕,安卓屏幕输出到电脑软件(Apowersoft Android Recorder) v1.2.4.1免费版...
  7. npm 提升最新版本
  8. 如何root安卓手机_安卓手机内的虚拟安卓系统,带root,非系统分身!
  9. 蚂蚁 头条 PingCAP,还有哪些你不知道的面试经验!
  10. SQL专项复习(窗口函数第二弹)——习题篇03