0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言的sizeof操作符基础和经典问题

汽车玩家 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2020-04-04 17:39 次阅读

sizeof基础

C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数)。其有两种表达形式:

(1)sizeof(类型说明符)

(2)sizeof 表达式

我们通常使用第(1)种形式。

其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为:

typedef unsigned int size_t;

首先确定我们当前编译环境中C语言各个基本数据类型在内存中所占字节数,我这里是32bit编译环境:

C语言的sizeof操作符基础和经典问题

我们这里的输出结果为:

C语言的sizeof操作符基础和经典问题

sizeof典型问题

sizeof看起来似乎很简单,那来看看下面这段代码,你能做对几个:

C语言的sizeof操作符基础和经典问题

实际运行 输出结果为:

C语言的sizeof操作符基础和经典问题

简要分析:

(1)sizeof(char) 的值为1。因为char类型数据在内存中占1字节。

(2)sizeof(char*)的值为4。因为char*代表一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。

(3)sizeof('a')的值为4。因为此处‘a’是独立存在的一个字符(没有赋值给其它变量),实际上就是一个整型数,占4个字节,即此处‘a’对应的ascii码的十进制为整数97。但是需要注意的是,若有如下定义:

char ch = 'a';

则此处ch的字节数sizeof(ch)的值为1,而不是4。

(4)sizeof(*s+0)的值为4,因为'h'+0 转化为int,占4字节。此处涉及到类型转换的问题。即不同类型的数据进行运算时,会首先转换成相同数据类型。转换规则为(图片来源于网络):

C语言的sizeof操作符基础和经典问题

(5)sizeof(*s)的值为1,因为此处*s为字符串s的第1个字符‘h’(注意与第三点区分开来,这里是有用char来修饰的),所以所占字节长度为1。

(6)sizeof(s)的值为4,同(2),此处s是一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3016

    浏览量

    73989
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136611
收藏 人收藏

    评论

    相关推荐

    逻辑异或运算在Python中的用法

    在Python编程语言中,逻辑异或运算并不直接作为一个内置的操作符存在,因为Python更侧重于高级编程和可读性,并没有直接提供异或运算的简写形式用于逻辑运算(真/假值的异或)。然
    的头像 发表于 11-19 09:46 144次阅读

    C语言指针运算详解

    C语言中,当你有一个指向数组中某个元素的指针时,你可以对该指针执行某些算术运算,例如加法或减法。这些运算可以用来遍历数组中的元素,如ptr[i]等价于*(ptr + i)。然而,如果你的操作使得指针指向了数组以外的位置(除了数
    的头像 发表于 10-30 11:16 227次阅读

    技术干货驿站 ▏解锁C语言高效编程秘诀:深入解析运算与优先级

    C语言的学习过程中,运算的使用是不可忽视的重要环节。本文将继续深入探讨C语言中的运算,重点
    的头像 发表于 10-13 08:09 239次阅读
    技术干货驿站 ▏解锁<b class='flag-5'>C</b><b class='flag-5'>语言</b>高效编程秘诀:深入解析运算<b class='flag-5'>符</b>与优先级

    技术干货驿站 ▏深入理解C语言:编程高手必备,全方位解析运算的核心技能!

    C语言的编程领域中,运算是实现数据处理与逻辑操作的关键工具。无论是在处理简单的数值计算,还是在构建复杂的逻辑结构时,运算的使用贯穿始终
    的头像 发表于 09-18 15:56 339次阅读
    技术干货驿站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>语言</b>:编程高手必备,全方位解析运算<b class='flag-5'>符</b>的核心技能!

    鸿蒙原生应用元服务开发-仓颉基础数据类型整数类型

    (十进制)。 整数类型支持的操作 整数类型默认支持的操作符包括:算术操作符、位操作符、关系操作符、自增和自减
    发表于 09-13 14:55

    鸿蒙原生应用元服务开发-仓颉基础数据类型布尔类型

    let b: Bool = false 布尔类型支持的操作 布尔类型支持的操作符包括:逻辑操作符(逻辑非!,逻辑与 &&,逻辑或 ||)、部分关系操作符
    发表于 09-09 09:57

    c语言中从左到右结合怎么看

    C语言中,操作符的结合性(Associativity)是指当操作符在表达式中连续出现时,它们如何与操作数结合的顺序。对于大多数二元
    的头像 发表于 08-20 11:42 819次阅读

    c语言从右到左的运算有哪些

    以下是一些主要的从右到左运算的C语言运算: 函数调用运算 ( () ):当您调用一个函数时,参数列表是从右到左进行求值的。 后置递增运算
    的头像 发表于 08-20 11:39 860次阅读

    FPGA学习笔记---基本语法

    3、信号类型:wire, reg, tri等 4、参数定义:parameter 5、运算操作符:各种逻辑操作符、移位操作符、算数操作符等 6、比较判断:if ... else, ca
    发表于 06-23 14:58

    浅析C语言中的变量修饰

    一、修饰类型51单片机采用哈佛结构。内存空间编址有重叠。可以在不同总线上定义不同的变量。在KEILC51中定义了data、idata、xdata、code几种域修饰。这些修饰决定了变量访问方式
    的头像 发表于 04-15 08:10 630次阅读
    浅析<b class='flag-5'>C</b><b class='flag-5'>语言</b>中的变量修饰<b class='flag-5'>符</b>

    C语言基础-为什么要使用C

    当今最流行的 Linux 操作系统和 RDBMS(Relational Database Management System:关系数据库管理系统) MySQL 都是使用 C 语言编写的。
    发表于 03-25 11:20 430次阅读

    c语言,c++,java,python区别

    C语言C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言
    的头像 发表于 02-05 14:11 2342次阅读

    “+”操作符的使用技巧

    这篇写个平时易被忽略的小知识点,一元 + 操作符的使用技巧。
    的头像 发表于 12-28 13:27 532次阅读

    C语言构建高效的嵌入式程序

    嵌入式工程师在编写C语言程序时,需要注重效率和清晰的思路。本文将通过解析经典问题“猴子选大王”来展示如何用C语言思维方式构建高效、清晰的程序
    的头像 发表于 12-21 09:27 621次阅读

    C语言-#和##的具体用法

    C语言中,在宏里面使用’#’和’##’有它非常神奇的作用。在宏定义的替换的过程中,#号可以作为一个预处理运算,把宏参数转换为字符串。##运算则可以把两个宏参数组合在一起。下面就来说
    的头像 发表于 12-19 12:54 5146次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>-#和##的具体用法