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
}