C/C++ struct 区别
来源:互联网 发布:如何让mac休眠不断网 编辑:程序博客网 时间:2024/06/17 19:02
今天参看了louden用c编写的编译器,发现其中一些地方使用struct很奇妙。所以又研究了一下struct的区别,并发现c和c++在某些地方是有区别的。
struct作为类的一种特例,是用来自定义数据结构的,在编程的过程中是很有用的。C和C++的主要区别是:一个结构标记声明后,C语言必须在结构标记前加上struct才能作为结构类型名,而C++语言中,结构标记可以直接作为结构类型名使用。此外,结构在C++中被作为类的一种特例,并且在结构中,数据成员和成员函数默认的访问权限是共有的,儿类的则是私有的。
首先我们先在C中使用struct:
按照上面的叙述,我很自然的如下书写:
struct Student{
int a;
int b;
};
int main(){
struct Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
如果我把struct去掉的话那么编译器就会报错(编译器使用的是vc 6.0),说Student是未声明的标识符。但是在c++中就不用担心这一点。如下:
#include<iostream>
using namespace std;
struct Student{
int a;
int b;
};
int main(){
Student st;
st.a = 90;
st.b = 80;
cout<<st.a<<endl;
Student tems = st;
cout<<tems.a<<endl;
return 0;
}
编译器不会报错。从上述的程序中我们还可以看到,struct在C和C++中可以实现各个变量之间的赋值,也就是说不用重载赋值操作符。
那么在C中我可不可以把struct给去掉呢?当然可以,你可以这么做:
typedef struct student{
int a;
int b;
} Student;
int main(){
Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
使用typedef即可实现上述要求。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
在C和C++中struct和union是非常相似的,只不过union共享存储区而已,共享的是数据变量所占空间最大的存储区。其他和struct一样,都如上所述:
union Student{
int a;
int b;
};
int main(){
union Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
输出结果是80
C++:
#include<iostream>
using namespace std;
union Student{
int a;
int b;
};
int main(){
Student st;
st.a = 90;
st.b = 80;
cout<<st.a<<endl;
Student tems = st;
cout<<tems.a<<endl;
return 0;
}
输出结果是80 80,从中可以看出它也重载了=操作符。
- C/C++ struct 区别
- c Union 和 struct 区别
- C与C++ struct区别
- C++:Struct 和 Union区别
- C/C++struct的深层区别
- C struct
- typedef struct与struct的区别(C语言中的)
- C/C++中的typedef struct 和 struct区别
- C#中struct和C中的struct的一个区别
- C语言中struct和typedef struct的区别
- struct和typedef struct,在C和C++中的区别
- struct和typedef struct(c和c++区别)
- C语言中typedef struct与struct的区别
- C/C++中typedef struct和struct的区别
- GO的struct与C的struct区别
- C语言struct和typedef struct的区别
- struct和typedef struct在c++和c中的区别
- [C#]class 与 struct 的区别
- I2C操作
- 大端存储和小端存储
- centos7下使用yum安装mysql
- WdatePicker显示时分秒
- Java this 引用逃逸
- C/C++ struct 区别
- Jackson学习一之对象与JSON互相转化
- 动手写一个Caffe层:矩阵相乘Matmul
- Java 8十个lambda表达式案例
- IT-rsync--使用记录
- 8.2 喀迈拉(no.41~no.44)
- python网络服务wsgi及相关
- 【JZOJ 4709】 Matrix
- Android中Activity之间参数传递