C语言空结构体所占的内存是多少?

一、问题

        标志结构体的关键字是 struct,它将⼀些相关联的数据封装成⼀个整体,⽅便在程序中使⽤。那么,空结构体所占内存是多少呢?

二、解答

1. 知识点介绍

        结构体所占的内存⼤⼩是其成员所占内存之和,例如:

struct stu
{int num;char name[20];int score;
};

        已知整型所占内存为 4 个字节,⼀个字符型所占内存为 1 个字节,因此这些结构体成员所占内存之和就是这个结构体所占的内存,为 28 个字节。

2. 上机验证

        ⼀个空结构体所占的内存有⼈会想到应该是 0,不占任何内存;有⼈会认为是 1 ,既然定义了,就⾄少有⼀个最⼩的内存,即 1 个字节。空想不如⾏动,亲⾃上机验证⼀下就知道答案了。 ⾃定义⼀个 employ 空结构体,在 TC2.0 环境中运⾏⼀下,代码如下:

#include <stdio.h> 
struct employ
{
}emp;
int main()
{printf("%d\n", sizeof(emp));return 0;
}

        运⾏结果如下所示。

1

        运⾏的结果竟然是 1,不是 0。因为编译器认为任何⼀种数据类型都有⾃⼰的⼤⼩, 这样⽤这个类型定义⼀个变量才能分配确定的内存空间⼤⼩。

        结构体亦如此,⽆论⾥⾯的数据有多少,都占有⾃⼰确定的内存空间。那么,空结构体的内存空间不能为 0,应该为多⼤最理想呢?在所有的数据类型中 char 占内存最⼩,为 1 个字节,那么空结构体的内存 应该在 0 到 1 范围内。然⽽,内存地址的最⼩单位是 1 个字节,不能为⼩数。那么,毋庸置疑,空结构体就只能定义为占 1 个字节。

三、总结

        C语⾔的知识体系⽐较庞⼤。在学习的过程中,有很多的细节问题不会被⼈注意到, 例如刚才这个问题,很少有⼈遇到过,因此也很少有⼈会闲下来思考和验证这个问题。在学习 C 语⾔的过程中,希望程序员们不要忙于敲代码,要多思考,在思考的过程中,让现有的知识得到升华。

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

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

相关文章

【Git】 Git分支操作指南

隐形的纪念躲在心里面 也许吧 也许不会再见 阴天或晴天 一天又一年 风它在对我说莫忘这一切 &#x1f3b5; 蔡淳佳《隐形纪念》 Git是一种非常强大的分布式版本控制系统&#xff0c;允许用户在开发过程中创建不同的分支&#xff08;branch&#xff09;来分…

【Unity Shader入门精要 第5章】开始 Unity Shader 学习之旅

1. shaderLab语义 在之前的代码中&#xff0c;经常会看到类似POSITION 、SV_POSITION之类的东西&#xff0c;这些都属于shaderLab的语义。简单来讲&#xff0c;这类语义的作用就是用来通知Unity某个变量&#xff08;或参数、输出&#xff09;是干什么用的&#xff0c;可以以此…

Docker 的网络实现

简介 标准的 Docker 支持以下 4 类网络模式&#xff1a; 1&#xff09;host 模式&#xff1a;使用 --nethost 指定 2&#xff09;container 模式&#xff1a;使用–netcontainer:NAME_or_ID 指定 3&#xff09;none模式&#xff1a;使用 --netnone 指定 4&#xff09;bridge 模…

C语言 循环语句 (3) for 循环语句

接下来 我们来看第三个 for语句 基本语句是 for关键字 然后小括号 括号中三个表达式 然后它对表达式2进行判断 如果表达式2条件成立 则走进循环体 执行完循环体 会回来执行表达式3 然后再返回来 继续对表达式2进行判断 如果表达式2 还是成立 这继续循环往复 直到表达式2的条件…

2024年巴黎奥运会网络安全风险评估

研究显示&#xff0c;2024年巴黎奥运会组委会网站的总体网络安全态势基本安全&#xff0c;但也凸显了一些风险&#xff0c;包括开放端口、SSL错误配置、cookie同意违规和域名抢注。 2024年巴黎奥运会备受全球关注&#xff0c;预计将有超过10亿人观看2024年巴黎奥运会&#xff…

公司后缀缩写

Co. Co. 是 company 的缩写&#xff0c;company 本身就是公司&#xff08;统称&#xff09;的意思&#xff0c;包括了各种类型公司。 单独使用 Co. 看不出公司具体的类型&#xff0c;经常会跟另一后缀一起使用 Co.,Ltd &#xff08;意思看后面&#xff09;。 Ltd. Ltd. 是 L…

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法 问题截图&#xff1a; 亲测有效的方法 方法一&#xff1a; 选择通过uniapp的开发工具Hbuilder来进行在线打包&#xff0c;取消默认勾选的以下选项。 然后进行在线打包就不会存在提交审…

MySQL:多表查询练习

#1.出版社信息 与 图书信息 交叉连接 select * from 出版社信息 cross join 图书信息; #2.从“客户信息”和“订单信息”两张数据表中查询购买了商品的客户信息&#xff0c;要求查询结果显示客户姓名、订单编号、订单状态。 select 客户信息.客户姓名,订单信息.订单编号,订单…

PS路径文字怎么变换的?

如果网友们没有用过钢笔工具&#xff0c;画好后的样子是什么&#xff0c;建议你看看这个方法&#xff01; 建立的路径之后&#xff0c;在编辑菜单栏里单击。 选择变换路径&#xff0c;可以改变路径文字的方向&#xff0c;点击垂直翻转即可完成方向的改变&#xff01;

linux进阶篇:Nginx反向代理原理与案例详解

Linux服务搭建篇&#xff1a;Nginx反向代理原理与案例详解 一、什么是正向代理 举个栗子&#xff1a; 我们在校外、公司外&#xff0c;是访问不到学校、公司的内网的&#xff0c;但是我们想要访问内网资源时&#xff0c;会用到VPN。而一般内网会存在一个VPN服务器&#xff0c…

imx6ull开发板设置SD卡启动,SD卡中烧写uboot,kernel,设备树,根文件系统fs

IMX6ULL ARM Linux开发板SD卡启动&#xff0c;SD卡的分区与分区格式化创建_sd制作分区-CSDN博客

n皇后问题

843. n-皇后问题 - AcWing题库 n皇后这道题目, 历来被作为理解深搜\回溯法的样板题, 首先我们可以用中规中矩的深搜来解决这道题: #include<iostream> using namespace std; const int N10; int n; char g[N][N];bool col[N],dg[N],udg[N];bool legal(int u,int i) {ret…

vulhub之jboss(CVE-2017-7504)

JBoss AS 4.x 及之前版本中&#xff0c; JbossMQ 实现过程的 JMS over HTTP Invocation Layer 的 HTTPServerILServlet.java 文件存在反序列化漏洞&#xff0c;远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。 CVE-2017-7504 漏洞与 CVE-2015-7501 的漏洞原理相似&a…

「51媒体」企业单位新闻稿件考核,怎么发布

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 电力税务企事业单位部门等单位提供了新闻稿件&#xff0c;如何在一些重点媒体进行宣发呢&#xff1a; 精准锁定发布媒体 了解考核要求&#xff1a;仔细阅读宣传任务名单&#xff0c;了解…

C++初阶之list的使用和模拟以及反向迭代器的模拟实现

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 一.list简介 list是一个带头双向链表&#xff0c;在数据结构的时候…

生成ssh来连接git

生成SSH密钥&#xff1a; 打开你的命令行终端&#xff08;如Windows的CMD、PowerShell&#xff0c;或者Linux/Mac的Terminal&#xff09;。 运行以下命令来生成SSH密钥对&#xff08;私钥和公钥&#xff09;&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexampl…

c++ 的线程是个对象吗

在C中&#xff0c;线程通常不是直接通过对象来表示的&#xff0c;但C11及以后的标准引入了对线程的高级抽象&#xff0c;主要是通过<thread>库中的std::thread类来实现的。因此&#xff0c;可以说std::thread是一个类&#xff0c;其实例&#xff08;对象&#xff09;表示…

10个SpringMVC的核心组件详解

Spring MVC 的核心组件是构成整个框架的基础&#xff0c;它们协同工作以支持基于 MVC 架构的 Web 应用程序开发。以下是V哥工作中整理的每个组件的详细介绍&#xff0c;包括示例代码和解释&#xff1a; 1. DispatcherServlet&#xff1a; 作用&#xff1a;作为前端控制器&…

不必追求深度,浅尝辄止为宜

近日笔者撰文称&#xff0c;有幸应《百度-百家号》相邀&#xff0c;在其发起的《征文任务》栏目中写作深度文章&#xff0c;便试着开头写了一篇《万科有“活下去”的可能性吗&#xff1f;》的时评文章&#xff0c;于5月3日发表&#xff0c;舆情反映不错&#xff0c;不到三天时间…

python菜鸟级安装手册

python安装教程 电脑-右键-属性&#xff0c;确认系统类型和版本号&#xff0c;比如本案例系统是64位 win10 点击python官网&#xff0c;进行下载 适用于 Windows 的 Python 版本 |Python.org 选择第一个安装程序64位即可满足需要&#xff0c; 嵌入式程序包是压缩包版本&…