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

    文章

    2804

    浏览量

    73158
  • C语言
    +关注

    关注

    180

    文章

    7552

    浏览量

    132015
收藏 人收藏

    评论

    相关推荐

    “+”操作符的使用技巧

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

    c语言经典教程

    电子发烧友网站提供《c语言经典教程.rar》资料免费下载
    发表于 11-20 11:45 4次下载
    <b class='flag-5'>c</b><b class='flag-5'>语言</b><b class='flag-5'>经典</b>教程

    C语言经典编程900例

    电子发烧友网站提供《C语言经典编程900例.rar》资料免费下载
    发表于 11-20 11:40 5次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>经典</b>编程900例

    C语言求数组长度的5种方法

    1,使用sizeof运算#includeintmain(){intarray[]={1,2,3,4,5};unsignedcharlength=sizeof(array)/sizeof
    的头像 发表于 11-19 08:00 2289次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>求数组长度的5种方法

    C语言教程及经典程序

    电子发烧友网站提供《C语言教程及经典程序.rar》资料免费下载
    发表于 11-18 10:37 0次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>教程及<b class='flag-5'>经典</b>程序

    Verilog基础:介绍几个常用的按位操作符

    操作符是对二进制位进行操作的运算。以下是一些常用的位操作符
    的头像 发表于 11-09 10:59 868次阅读

    Verilog基础:几个常用的按位操作符

    操作符是对二进制位进行操作的运算
    的头像 发表于 11-09 10:57 932次阅读

    请问C语言文件中的预处理操作符#和##各有什么作用?

    C语言文件中的预处理操作符#和##各有什么作用?
    发表于 11-06 08:09

    C语言运算的使用方法

    详细介绍了C语言表达式、算术运算、赋值运算、关系运算、条件结构、逻辑运算、位运算
    发表于 11-02 11:30 722次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>运算<b class='flag-5'>符</b>的使用方法

    如何使用位操作符实现低级别的位掩码

    在本文中,我们来看看如何使用位操作符实现低级别的位掩码。我们将看到我们如何将一个单一的 int 变量作为一个单独的数据容器。 位掩码 位掩码允许我们在一个数字变量中存储多个值。我们不再把这个变量看作
    的头像 发表于 10-07 16:52 295次阅读

    C语言经典算法大全

    C语言经典算法,详细解析算法过程及算法思想,给读者具有启发意义,教程包含C语言大部分常用算法,仅供学习,禁止商业传播
    发表于 10-07 08:16

    C语言中算法运算的基本使用方法

    C语言的算数运算,是用来完成基本的算术运算的符号。
    发表于 08-21 14:42 458次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>中算法运算<b class='flag-5'>符</b>的基本使用方法

    C语言中赋值运算详解

    C语言中,赋值运算用于将一个值赋给变量。
    发表于 08-18 16:38 1401次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>中赋值运算<b class='flag-5'>符</b>详解

    【verilog每日一练】移位操作符的使用

    定义变量reg [7:0]a;reg [7:0]b;reg [7:0]c;暂不考虑溢出及小数,用移位操作符(<<、>>)实现b等于a乘以4的结果,c等于a除以8的结果
    发表于 08-14 10:36

    C语言sizeof和strlen的区别

    大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言sizeof和strlen的区别,希望能对你有所帮助
    发表于 07-11 11:51 391次阅读