sizeof你真的弄明白了吗?

sizeof基础


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

(1)sizeof(类型说明符)

(2)sizeof 表达式

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

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

typedef unsigned int size_t;

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

#include <stdio.h>int main(void)
{printf("sizeof(char)  = %u\n", sizeof(char));printf("sizeof(short) = %u\n", sizeof(short));printf("sizeof(int)   = %u\n", sizeof(int));printf("sizeof(long)  = %u\n", sizeof(long));printf("sizeof(float) = %u\n", sizeof(float));printf("sizeof(double)= %u\n", sizeof(double));return 0;
}

我们这里的输出结果为:

640?wx_fmt=png

sizeof典型问题


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

#include <stdio.h>int main(void)
{char *s = "hello";printf("sizeof(char) = %u\n", sizeof(char));printf("sizeof(char*)= %u\n", sizeof(char*));printf("sizeof('a')  = %u\n", sizeof('a'));printf("sizeof(*s+0) = %u\n", sizeof(*s+0));printf("sizeof(*s)   = %u\n", sizeof(*s));printf("sizeof(s)    = %u\n", sizeof(s));return 0;
}

实际输出结果为:

640?wx_fmt=png

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

640?wx_fmt=gif

简要分析:

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

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

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

char ch = 'a';

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

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

640?wx_fmt=jpeg

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

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

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


640?wx_fmt=jpeg

扫码或长按关注

回复「 加群 」进入技术群聊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一道90%都会做错的指针题

今天&#xff0c;在我们的一个小群里&#xff0c;一个同学发了一道题目给我看&#xff0c;这道题目应该是C语言面试的一股清流了&#xff0c;各种招聘笔试上都可以看到&#xff0c;我试着发到我的大群里去&#xff0c;发现有人对这个理解不是很深刻&#xff0c;所以再发出来&am…

python调用arcgis_arcgis python 调用工具两种两种方法

原博文 2019-09-20 11:26 − arcpy.Select_analysis("p","kk") arcpy.analysis.Select("p","kk1") ... 相关推荐 2019-12-18 20:28 − import time import wmi, zlib def get_cpu_info(): tmpdict {} tmpdict["CpuCores"] …

ibatis mysql 同时删多个表报错_MySQL中Multiple primary key defined报错的解决办法

MySQL中Multiple primary key defined报错的解决办法创建主键可以有两种方式&#xff1a;create table 表名(字段名 类型&#xff0c;字段名 类型&#xff0c;……primary key(name));或者是create table 表名(字段名 类型 primary key&#xff0c;字段名 类型&#xff0c;………

Android ANR视角InputDispatcher

作者&#xff1a;王小二前言有好多人向我咨询过Input ANR问题&#xff0c;说实话&#xff0c;我也是一直无法彻底的解释清楚&#xff0c;我下决心要彻底搞懂这块知识点。话不多说先上图一个event的正常流程InputReader线程1.InputReader线程一旦发现有新的event&#xff0c;判断…

频繁跳槽,这谁顶得住~

最近应该是校招的时候&#xff0c;相信很多人都面临择业的问题&#xff0c;正念同学的文章&#xff0c;记录了自己一个嵌入式工程师这几年找工作换工作的经历。加我好友的都知道&#xff0c;我这几天发了一个朋友圈&#xff0c;说不要乱跳槽&#xff0c;我想表达的是&#xff0…

java script object_javascript Object与Array用法

引用类型&#xff1a;引用类型是一种数据结构&#xff0c;用于将数据和功能组织在一起。引用类型的值是引用类型的一个实例。一、ObjectECMAScript中的对象其实就是一组数据和功能的结合。Object类型其实是所有它的实例的基础&#xff0c;换句话说&#xff0c;Object类型所有具…

Linux内核编程广泛使用的前向声明(Forward Declaration)

前向声明编程定律先强调一点&#xff1a;在一切可能的场景&#xff0c;尽可能地使用前向声明(Forward Declaration)。这符合信息隐蔽的原则。一个例子regmap那么前向声明究竟是个什么鬼&#xff1f;在内核写代码和看代码的童鞋&#xff0c;经常发现Linux内核里面充斥着这样的代…

Top 10 Project Management Software

转载于:https://www.cnblogs.com/shy1766IT/p/7082910.html

java 二维数组 floyd_Floyd算法(一)之 C语言详解

本章介绍弗洛伊德算法。和以往一样&#xff0c;本文会先对弗洛伊德算法的理论论知识进行介绍&#xff0c;然后给出C语言的实现。后续再分别给出C和Java版本的实现。弗洛伊德算法介绍和Dijkstra算法一样&#xff0c;弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短…

南拳北腿

昨晚&#xff0c;熬夜看了篮球综艺节目&#xff0c;《我要打篮球》&#xff0c;实在话&#xff0c;我是林书豪的球迷&#xff0c;所以我肯定是希望林书豪球队能获胜&#xff0c;最后也如我所愿&#xff0c;两场3v3&#xff0c;电光飞侠都是在处于被动的情况下完成自我救赎&…

C语言const 关键字

面试的时候&#xff0c;应该有遇到const相关的&#xff0c;毕竟也是学习中的一个知识点&#xff0c;看完我们这篇文章&#xff0c;我觉得你应该可以在面试中完完全全的吃透const这个点。const和变量const uint32_t hello 3;编译的时候&#xff0c;编译器就知道了 hello 这个变…

pandas 第一行_Pandas数据预处理相关经验

在这里记录一些平常用的pandas操作以供参考。学习相关操作的最好方法还是找官方的文档最好&#xff0c;否则就会产生百度1小时&#xff0c;查文档3分钟的尴尬处境&#xff0c;之前为了找python里类似 in 的操作搜了半天资料也没找到&#xff0c;结果文档里就是 isin 函数就好了…

单机 amp; 弱联网手游 防破解、金币改动 简单措施

单机 &amp; 弱联网手游 防破解、金币改动 简单措施 手游经常使用破解方法 对于一个弱联网或者单机游戏&#xff0c;能够从下面方面去破解&#xff1a; 1、找得到存档文件的&#xff0c;直接破解改动存档文件。 2、找不到存档文件&#xff0c;就在游戏执行时借助一些软件来改…

Linux 内核通知链和例程代码

概念大多数内核子系统都是相互独立的&#xff0c;因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求&#xff0c;也即是让某个子系统在发生某个事件时通知其它的子系统&#xff0c;Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用&#x…

faster rcnn resnet_RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比

RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比一&#xff0e;RCNN问题一&#xff1a;速度经典的目标检测算法使用滑动窗法依次判断所有可能的区域。本文则预先提取一系列较可能是物体的候选区域&#xff0c;之后仅在这些候选区域上提取特征&#xff0c;进行判断。问题二…

啰嗦一二三

第一点之前有一个抽奖&#xff0c;抽取野火开发板的&#xff0c;我记得有很多人参加了&#xff0c;20号的时候&#xff0c;获奖的同学都主动找我填写了收获地址&#xff0c;但是有一个同学特别调皮&#xff0c;到今天都没有来找我&#xff0c;我等了好久好久&#xff0c;还是没…

go设置后端启动_为什么 Rubyists 应该考虑学习 Go

点击上方蓝色“Go语言中文网”关注我们&#xff0c;领全套Go资料&#xff0c;每天学习 Go 语言如今&#xff0c;越来越少的 Web 开发人员开始专注于 Ruby 之类的单一语言。我们针对不同的工作使用不同的工具。在本文中&#xff0c;Ayooluwa Isaiah 认为 Go 是 Ruby 的完美补充。…

生涯刚开始就要转会?

昨晚&#xff0c;12点快睡觉的时候&#xff0c;一个同学给我发来的问题&#xff0c;篇幅有点长&#xff0c;都是文字&#xff0c;看起来可能有点乏味&#xff0c;不过有耐性的同学还是瞄一下&#xff0c;应该很多人都有这样的迷茫期&#xff0c;我的解答也不一定完全正确&#…

Topaz Video AI 视频修复工具(内附安装压缩包win+Mac)

目录 一、Topaz Video AI 简介 二、Topaz Video AI 安装下载 三、Topaz Video AI 使用 最近玩上了pika1.0和runway的图片转视频&#xff0c;发现生成出来的视频都是有点糊的&#xff0c;然后就找到这款AI修复视频工具 Topaz Video AI。 一、Topaz Video AI 简介 Topaz Video…

python文本编辑器报错_notepad++编辑器中运行python程序时需要注意的编码格式

本篇文章给大家带来的内容是关于notepad编辑器中运行python程序时需要注意的编码格式&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。 语言&#xff1a;python3.4 文本编辑器&#xff1a;notepad 报错&#xff1a;SyntaxErro…