空结构体与空类解析

本文探讨了C++和C语言中空结构体和空类的内存占用情况。在C++中,空类的大小为1个字节,这是为了确保每个实例都有独一无二的地址,而C语言中空结构体的大小可能为0。文章通过实例展示了不同环境下的编译结果,并解释了这种现象背后的原因。
摘要由CSDN通过智能技术生成

 我们知道在C++中结构体和类是差不多的,有一个明显的区别就是:结构体默认的类型是公有的,而类中的成员默认是私有的。 

但是在C语言中的结构体就与C++中的结构体有所不同了。先说一个小小的不同,C语言中定义结构体变量必须写上struct关键字,但是一个.cpp文件定义结构体变量,直接写结构体名称即可,因为我们上边说了,C++中结构体和类只有访问限定哪一个明显的区别,其他基本一样,所以结构体名称就相当于类名,所以就不必加上struct关键字。

接下来我们先来看一下C语言中一个空结构体的大小是多少?

#include<stdio.h>

struct Node
{
};

int main()
{
	struct Node m;
	printf("%d\n",sizeof(m));
	return 0;
}

同样一份代码,我们分别在Windows底下的VS和Linux下gcc编译,惊讶的发现竟然是不一样的。

由图可以看出我们在VS中并不能定义一个空的结构体,所以也并不存在它的大小是多少。接下来同样的代码在Linux中编译,结果是通过的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值