原标题:sizeof 你真的弄明白了吗?来看看这个例子

sizeof基础

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

(1)sizeof(类型说明符)

(2)sizeof 表达式

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

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

typedef unsigned int size_t;

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

#include

intmain(void)

{

printf( "sizeof(char) = %un", sizeof( char));

printf( "sizeof(short) = %un", sizeof( short));

printf( "sizeof(int) = %un", sizeof( int));

printf( "sizeof(long) = %un", sizeof( long));

printf( "sizeof(float) = %un", sizeof( float));

printf( "sizeof(double)= %un", sizeof( double));

return0;

}

我们这里的输出结果为:

sizeof典型问题

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

#include

intmain(void)

{

char*s = "hello";

printf( "sizeof(char) = %un", sizeof( char));

printf( "sizeof(char*)= %un", sizeof( char*));

printf( "sizeof('a') = %un", sizeof( 'a'));

printf( "sizeof(*s+0) = %un", sizeof(*s+ 0));

printf( "sizeof(*s) = %un", sizeof(*s));

printf( "sizeof(s) = %un", sizeof(s));

return0;

}

实际输出结果为:

你懵了吗?没懵的话算我输

简要分析:

(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字节。此处涉及到类型转换的问题。即不同类型的数据进行运算时,会首先转换成相同数据类型。转换规则为(图片来源于网络):

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

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

End:以上就是本次的分享,如有错误,欢迎指出!欢迎转发、下载、收藏、点赞。

欢迎大家留言区讨论哦!

Wink !

请大家来给这几行C语言代码找找茬

一个简单但能考察C语言基础的题目,试试?

八大排序算法 ,C语言详细版讲解,硬核推荐!!!

堆和栈的区别(非常详细,干货收藏!)

C语言中“悬空指针”和“野指针”究竟是什么意思?

这绝对是C语言的一个经典例题了!

这两个C运算符你可能没用过,但却很有用~返回搜狐,查看更多

责任编辑:

c语言sizeof char,sizeof 你真的弄明白了吗?来看看这个例子相关推荐

  1. c语言sizeof char,sizeof(char),sizeof(char*),sizeof(char[4]),

    32位系统,地址长度是32位(bit),也就是4Byte;64位系统,地址长度是64位(bit),也就是8Byte 运用1: char a[] = "hello world"; / ...

  2. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

  3. sizeof你真的弄明白了吗?来看看这个例子

    本文 转自「嵌入式大杂烩」,喜欢的同学可以关注~ sizeof基础 在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数).其有两种 ...

  4. sizeof你真的弄明白了吗?

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

  5. java中new与newitance_你真的弄明白 new 了吗

    好久没有写点东西了,总觉得自己应该写点牛逼的,却又不知道如何下笔.既然如此,还是回归最基本的吧,今天就来说一说这个new.关于javascript的new关键字的内容上网搜一搜还真不少,大家都说new ...

  6. mysql编码问题——charset=utf8你真的弄明白了吗?

    导读:以前学习mysql的时候,一直不知道"charset=utf8"是什么意思,更不知道"set names gbk"是什么意思,通过这篇文章将会给大家详细介 ...

  7. c语言详解sizeof

    原文地址:http://blog.sina.com.cn/s/blog_5da08c340100bmwu.html 一.sizeof的概念   sizeof是C语言的一种单目操作符,如C语言的其他操作 ...

  8. c语言 sizeof_c语言详解sizeof

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

  9. c++指针详解_c语言详解sizeof

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

最新文章

  1. flink批处理访问mysql_Flink 异步IO访问外部数据(mysql篇)
  2. android 双击home退出程序,Android项目实战(五十五):部分机型点击home再点图标进入程序不保留再之前界面的问题...
  3. jvm性能调优实战 - 40 百万级数据误处理导致的频繁Full GC问题优化
  4. 带你认识Linux安全渗透,秒懂的那种
  5. 【赠书】五一假期福利,OpenCV4最新原理与实战书籍
  6. JVM内存分为哪几部分?各个部分的作用是什么?
  7. Vue学习之路---No.7(分享心得,欢迎批评指正)
  8. 电脑没有声音一键修复_电脑上有没有好用点的办公提醒小软件?有带声音提醒的桌面便签软件吗...
  9. Spark的基本架构
  10. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树
  11. Glob Patterns匹配模式使用
  12. java各个平台订单动态对接_平台订单丨全国各地最新采购、代加工订单,免费联系对接...
  13. c语言中文网 vc++6.0下载量_【新手必看】C语言开发环境,请查收!
  14. 20160417_无为_常州
  15. 当迷茫在大学里泛滥成灾——李开复
  16. 金融计量模型(十一):对波动率和相关性建模
  17. 模式识别属于计算机科学吗,模式识别与智能系统这个学科属于什么类?
  18. OceanBase基本概念
  19. JAVA生成订单编号工具类
  20. python微信聊天记录自动上传_python实现微信定时每天和女友发送消息

热门文章

  1. STA - Clock Groups:set_clock_groups/Logically Exclusive/Physically Exclusive Clocks
  2. android测试版微信7.0下载地址,微信7.0.7下载地址-微信 7.0.7安卓内测版下载-西西软件下载...
  3. RFSoC应用笔记 - RF数据转换器 -20- API使用指南之配置RFDC工作状态(ADC、DAC均适用)
  4. cmd进入dos命令运行java文件报错找不到无法加载类
  5. java yearmonth_Java Year atMonth(Month month)用法及代码示例
  6. 1095:数1的个数(信奥)
  7. 教师运用计算机上课的随笔,计算机实训课堂教学随笔
  8. 基于SSM人才网站招聘网站求职网站就业系统兼职网站职位发布简历上传专业推荐匹配算法(idea-javaweb-javaee-j2ee-springboot)
  9. js简单判断页面是否为手机端访问
  10. 大智慧365除权数据导出存通达信板块源码+工具