8.19结构体
1.结构体函数
下列代码作用是将一个结构体打包成一个函数,然后以便调用获取Point的值
```c
#include <stdio.h>
typedef struct {
int x;
int y;
}Point;
Point get_point(void);
int main()
{
Point my_point = get_point();
printf("Point:%d,%d",my_point.x,my_point.y);
return 0;
}
Point get_point(void){
Point p = {10,20};
return p;
}
```
2.结构体数组
```c
#include <stdio.h>
typedef struct {
int x;
int y;
}Point;
int main()
{
Point double_point[2]={
{1,2},{3,4}};
//定义一个包含2个point的结构体数组
//然后给他输出出来
for(size_t i=0;i<2;i++){
printf("Point:%d,%d\n",double_point[i].x,double_point[i].y);
}
return 0;
}
```
3.结构体指针
```c
#include <stdio.h>
typedef struct {
char street[50];
char city[50];
char country[50];
}Address;
typedef struct{
char name[100];
int age;
Address address;//嵌套结构体
}Person;
int main()
{
Person zhangsan ={"ZhangSan",20,
{"龙岗","十堰","Chian"}};
printf("Message:%s,%d,%s,%s,%s",zhangsan.name,zhangsan.age,
zhangsan.address.street,zhangsan.address.city,zhangsan.address.country);
Person* Copy=&zhangsan;
printf("\nCopy Message:%s,%d,%s,%s,%s",Copy->name,Copy->age,
Copy->address.street,Copy->address.city,Copy->address.country);
return 0;
}
```
---
## 4.枚举(Enumeration)enum
```c
#include <stdio.h>
typedef enum{
MONDAY,//0
TUESDAY,//1
WEDENSDAY,//2
THURSDAY,//3
FRIDAY,//4
SATURDAY,
SUNDAY
}Weekday;
int main()
{
Weekday day = SUNDAY;
printf("%d",day);
//printf("%d",FRIDAY);
return 0;
}
//常量静态字符
//const char* get_weekday(weekday day);
```
## 5.共用体union
特点:结构体里的成员都共用一块内存,一个房间不同体型的物品,用到谁就把它放进去,房子的面积是最大成员的面积,可以节省空间。(不严谨
```c
#include <stdio.h>
typedef union{
int int_value;
float float_value;
char* string_value;
}Data;
typedef enum{
INT,
FLOAT,
CHAR
}DataType;
typedef struct{
Data data;
DataType type;
}TypeData;
void print(TypeData* typed_data){
switch(typed_data->type){
case INT:
printf("INTEGER:%d\n",typed_data->data.int_value);
break;
case FLOAT:
printf("FLOAT:%f\n",typed_data->data.float_value);
break;
case CHAR:
printf("STRING:%s\n",typed_data->data.string_value);
break;
default:
break;
}
}
int main()
{
TypeData data1 = {{.int_value=10},INT};
TypeData data2 = {{.float_value=114.514},FLOAT};
TypeData data3 = {{.string_value="sabdobaf"},CHAR};
print(&data1);
print(&data2);
print(&data3);
return 0;
}
```
**以上代码的作用是通过枚举选择共用体的数据类型,最后输出该数据类型的值。**