友链

sizeof不是函数,就是一个一元运算符,只不过用起来象个函数而已

对于数据类型,sizeof会计算出该数据类型的大小,比如sizeof(int)就是4

但是如果是指针的话

比如

char* a[16];
sizeof(a)的值就是16

char** a[16];
sizeof(a)的值就是64

以前我一直以为

char a[16];

sizeof(a)因该是4,因为a其实就是一个指针,在32位操作系统中,一个指针(内存地址)长度就是32bit即4字节

但是事实证明他会计算出这个指针所指向的内存空间(未分配)的大小,而不是指针类型的大小

下面再来看这个:

可以从上图中看到,不管是char*还是char**,sizeof都是4,也就是指针的长度

你可能会问,那么这前后到底有什么区别呢

其实很简单,区别就是char cliIp[16]分配了一块静态内存

而如果是使用malloc分配的动态内存,就不会有这个效果:

你可能又会问了,为什么同样都是内存,使用malloc分配的内存就不会被计算出来呢

那是因为sizoef是一个编译时的运算符,sizoef(xxx)的值并不是在程序运行的时候才被计算出来,而是在编译的时候就已经计算出来了,请看下面的反编译代码

可以看到这里直接把0x10h(16进制,即10进制的16)作为参数传给了printf函数

这个0x10h是硬编码到程序指令中的,而不是存储在任何寄存器或者内存中

但是malloc只有在程序运行起来之后才会分配内存,这也就是原因所在了

理解C语言中的sizeof操作符相关推荐

  1. c语言中sizeof是一个标准库函数,对C语言中的sizeof的介绍分析

    对C语言中的sizeof的介绍分析 引导语::sizeof是C语言中判断数据类型或者表达式长度符,以下是百分网小编分享给大家的对C语言中的sizeof的介绍分析,欢迎阅读! 1.定义 sizeof是C ...

  2. c语言中sizeof结构体,C语言中的sizeof用法

    C语言中的sizeof是一个很有意思的关键字,经常有人用不对,搞不清不是什么.我以前也有用错的时候,现在写一写,也算是提醒一下自己吧.反正现在来看,还在搞sizeof是什么意思,怎么用正确,还是有点搞 ...

  3. c语言sizeof(test),解析C语言中的sizeof

    一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的 ...

  4. C语言中的sizeof()和strlen()的区别

    C语言中的sizeof和strlen的区别 sizeof() strlen 大量案例(想深入了解可以看) 1.(花括号int的sizeof()) 2.(花括号char的sizeof()) 3.(字符串 ...

  5. sizeof 在C语言的作用,C语言中的sizeof的用法详解

    C语言中的sizeof的用法详解 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操 ...

  6. 一文理解C语言中的volatile修饰符

    一文理解C语言中的volatile修饰符 2019/12/2 FesianXu 前言 volatile修饰符是在嵌入式开发和多线程并发编程中常见的修饰符,理解其对于实践过程非常有帮助,此文参考了[1] ...

  7. 理解C语言中的a++、a--和++a、--a

    C语言中 a++ a-- 和 ++a --a 的区别 a++ 表示先赋值再进行加运算 a-- 表示先赋值再进行减运算 ++a 表示先进行加运算再赋值 --a 表示先进行减运算再赋值 注:从上面的概念理 ...

  8. 解析C语言中的sizeof

    一.sizeof的概念  sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内 ...

  9. C语言中的sizeof解析

    1. 定义: sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数.返回 值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系 ...

最新文章

  1. P4113 [HEOI2012]采花 树状数组离线
  2. MIT与FAIR提出「mixup」,利用数据和标签的随机线性插值提高神经网络的健壮性
  3. socket 获取回传信息_基于netty框架的socket长连接负载均衡解决方案 oswl
  4. C语言中的数据类型及其转换详解
  5. 4.Java中的关键字和标识符
  6. python分块处理功能_python 对列表分块
  7. ios 启用 证书_如何在iOS 10中启用就寝提醒,轻柔的唤醒和睡眠跟踪
  8. 高斯曲率求表面极值点
  9. 简历准备及面试技巧,你应该知道的一切
  10. python中一个对象只能被一个变量引用吗_Python中for循环里的变量无法被引用的解决方法...
  11. STM8学习笔记---IAR工程重命名
  12. 贪心算法 (Greedy Algorithm)
  13. 个人总结 超详细 windows10下载与安装
  14. ColorUI使用与技巧
  15. 用origin画不同柱族柱状图
  16. TypeScript + React + Redux 实战简单天气APP全套完整项目
  17. 博客文章详情页更新公告
  18. 绿色IT实现的阻碍 IT企业污染严重
  19. 【Java基础】手把手教你用Java制作飞翔的小鸟
  20. java计算机毕业设计体育用品购物系统源程序+mysql+系统+lw文档+远程调试

热门文章

  1. QT日记八,QT中的json应用
  2. 虚拟ECU:助力汽车故障诊断
  3. xp系统粘贴是灰色的_PE安装原版XP系统(含高版本PE安装选项灰色处理办法)
  4. 软件工程应用与实践(8)——视频清晰度切换
  5. 【实用工具】文件扫描
  6. matlab ode45求解齿轮动力学,[转载]Matlab中解常微分方程的ode45 【转载】
  7. protobuf初识
  8. “2020中小企业产融结合高峰论坛”在京隆重举行
  9. 产业基础决定产融模式
  10. 8月访问学者博士后热门国家及地区入境政策汇总