C语言中最原始的结构体定义及声明的例子如下
//定义
struct users{
char name[10];
int age;
};
//声明一个变量
struct users Kelly;
//先定义后声明
其实在定义时也可以连带声明几个变量
//定义加声明
struct users{
char name[10];
int age;
}Kelly,Korloa; 声明了两个变量
当然如果你只需要几个结构体变量的话(后续不会用到),那么结构体名干脆不写了:
//定义加声明
struct{
char name[10];
int age;
}Kelly,Korloa; 声明了两个变量
这样做的缺点就是你以后再也无法声明这个结构体变量。
回到第一个代码块,发现每一次声明一个变量都在结构体类型名前加个struct,很麻烦,对此,C语言为你提供了typedef来优化,具体而言:
//定义
typedef struct users{
char name[10];
int age;
}Users;
//声明
Users Korloa,John;
我们都知道typedef起到替换的作用,这里就当于把struct users 替换为Users,因此可以用Users直接声明结构体变量
当然既然以后都用Users声明了,user这个类型名也没用了,可以不写,如下:
//定义
typedef struct{
char name[10];
int age;
}Users;
//声明
Users Korloa,John;
以上讨论的是C语言的结构体,下面开始讨论C++
与C语言不同,C++可以直接用类型名声明变量,如下图所示:
//定义
struct Users{
char name[200];
int age;
};
//声明
Users John;
是不是方便很多,以上C语言的特性C++都有,只是在这里多了一个C++的特性。
下面来讲一下初始化
C/C++通用
Approach 1
//定义
struct users{
char name[10];
int age;
};
//声明一个变量
struct users Kelly;
//先定义后声明
//初始化
Kelly.name="Kelly Sarah";
Kelly.age=18;
Approach 2
//定义
struct users{
char name[10];
int age;
};
//声明一个变量
struct users Kelly;
//先定义后声明
//初始化
Kelly={"Kelly Sarah",18};
C++还可以用构造函数
#include<iostream>
//定义
struct Users{
int age;
char* name;
//构造
Users(int t_age,char* str){
age=t_age;
name=str;
}
};
int main(){
//声明
Users a(18,"sas");
printf("%d%s",a.age,a.name);
return 0;
}
但要注意的是有了构造函数,Approach 2 就不能再用了,否则会报一堆错。
以上就是有关C/C++结构体方面的讨论。