C语言与c++中结构体之间的区别

文章详细阐述了C和C++在处理结构体时的几个关键区别,包括C不支持结构体成员函数,不允许初始化成员变量,空结构体的sizeof为0,以及C++对权限修饰符和typedef的不同处理。此外,还通过代码示例展示了这些差异,如C++允许结构体内的成员函数定义和初始化,以及空结构体在C++中占用至少1字节内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.C中结构体不能有成员函数,而C++中可以

2.C结构体不能在结构体中初始化成员变量,而C++结构体可以

3.C结构体的空结构体sizeof为0,C++的sizeof为1。

C、C++语言要求空结构体的实例在内存中具有不同的地址,但是C++另外还要求空结构体的地址是唯一的,即使结构体没有任何成员。

注意:空结构体的大小只会影响结构体实例占用的内存空间,并不影响结构体作为成员变量时的大小。

4.C结构体只有public一种权限,而C++结构体有public、private、protect三种修饰符

5.C结构体在定义时除非使用typedef,否则之后定义变量都必须跟上struct + 结构体名,而C++结构体可以直接使用结构体名,不需要加struct。

c语言代码测试:

#include<stdio.h>
struct node{};
struct node2{
	struct node p1;
	void add(int a,int b);//field ‘add’ declared as a function  成员函数出错
	int sum=0;// expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token赋初始值出错
};
int main(){
	printf("%ld",sizeof(struct node));//0
	printf("%ld",sizeof(struct node2));//0
}

c++代码测试:

#include<iostream>
#include<cstdio>
using namespace std;
struct node{};
struct node2{
	struct node p1;
};
int main(){
	cout<<sizeof(struct node);//1
	cout<<sizeof(struct node2);//1
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值