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

server/2024/10/21 18:38:33/

一、问题

        标志结构体的关键字是 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.ppmy.cn/server/39279.html

相关文章

汽车早报|赛力斯称就山西M7事故不实信息报案 消息称苹果正接触美国电动车新创 | 最新快讯

中汽协&#xff1a;3月汽车商品进出口总额为238.7亿美元&#xff0c;环比增长19.4% 据中国汽车工业协会整理的海关总署数据显示&#xff0c;截止到今年3月&#xff0c;汽车商品进出口总额同比小幅增长。2024年3月&#xff0c;汽车商品进出口总额为238.7亿美元&#xff0c;环比…

Three.js基础练习——渲染一个立方体

1.学习内容参考了 three.js入门教程--零基础也能学会_threejs菜鸟教程-CSDN博客 本章内容包含渲染立方体&#xff0c;并配合ui工具食用~ 2.效果图 import * as THREE from three import * as dat from dat.gui import { OrbitControls } from three/addons/controls/OrbitC…

十二届蓝桥杯Python组1月中/高级试题 第三题

** 十二届蓝桥杯Python组1月中/高级试题 第三题 ** 第三题&#xff08;难度系数 3&#xff0c;25 个计分点&#xff09; 提示信息&#xff1a; 有一堆砖&#xff0c;需要按照一定规律进行堆放&#xff0c;具体堆放规律如下&#xff1a; 顶层放1块砖&#xff0c; 第二层放3块砖…

Double 4 VR智能互动情景教学系统在商务英语课堂中的应用

随着科技的不断发展&#xff0c;虚拟现实技术&#xff08;VR&#xff09;已经逐渐渗透到教育领域&#xff0c;为课堂教学带来了新的可能性。商务英语课堂也不例外&#xff0c;VR智能互动情景教学系统在商务英语课堂中的应用&#xff0c;能够为学生提供更加真实、生动的商务场景…

go方法集

方法集 Golang方法集 &#xff1a;每个类型都有与之关联的方法集&#xff0c;这会影响到接口实现规则。 • 类型 T 方法集包含全部 receiver T 方法。• 类型 *T 方法集包含全部 receiver T *T 方法。• 如类型 S 包含匿名字段 T&#xff0c;则 S 和 *S 方法集包含 T 方法。 …

使用 backtrace 调测 SIGSEGV 信号 ---- 打印寄存器值

#define _GNU_SOURCE #include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <execinfo.h> #include <ucontext.h> /* * backtrace和bacetrace_symbols打印出回溯信息 */ #if 0 #include <e…

学习javascript,实现一个简易售卖机的功能

有同学提问&#xff0c;说想实现一个JS售卖机的功能&#xff0c;我觉得这个挺有意思的&#xff0c;正是初学者学习JS&#xff0c;锻炼软件开发思维的一个好题目&#xff0c;所以就实现了一下&#xff0c;希望可以有帮助。 目录 1 需求分析 2 开发实现 2.1 商家端录入 2.2…

全面了解俄罗斯的VK开户和Yandex投放及内容运营

俄罗斯的VKontakte&#xff08;简称VK&#xff09;和Yandex是两个重要的在线平台&#xff0c;对于希望在俄罗斯市场进行推广的企业来说&#xff0c;了解如何在这些平台上开户和投放广告以及内容运营是非常关键的。 俄罗斯vk广告如何开户&#xff1f; 通过上海上弦进行俄罗斯V…