声明/使用结构类型
// 声明,放在函数外面代表全局的
struct date{
int year;
int month;
int day;
};
// 使用,结构可以赋值给其他结构变量,可以取地址,也可以做函数参数
// 1、
struct date tody;
today.year = 2018
today.month = 12;
tody.day = 23;
// 2、
struct date today = {2018, 12, 23};
// 3、
struct date today = {.monty = 12, .year = 2018}; // day会默认给一个0
// 结构指针
struct date *p = &today;
// 定义结构时同时定义两个变量,p1和p2中会有x和y
struct point{
int x;
int y;
} p1, p2;
结构与函数
// 和普通变量一样,和数组不一样,数组是一个指针
int number(struct date d);
// 结构可以做函数的返回值
#include
#include
struct point getStruct(struct point p);
struct point {
int a;
int b;
};
int main(int argc, char **argv) {
struct point x;
struct point y = getStruct(x);
printf("%d", y.a); // 1
printf("%d", y.b); // 2
}
struct point getStruct(struct point p){
p.a = 1;
p.b = 2;
return p;
}
// 结构指针作为参数(推荐),用->表示指针所指的结构变量中的成员
struct date today;
struct date *p = &today;
(*p).month = 12;
p->month = 12; // 推荐
结构数组
// 定义
struct date{
int a;
int b;
int c;
};
// 声明/使用
struct date dates[] = {
{1, 2, 3}, {4, 5, 6}
};
dates[0].a;
结构中的结构
// 定义
struct point{
int x;
int y;
};
struct rect{
struct point pt1;
struct point pt2;
};
// 使用
struct rect r;
r.pt1.x = 1;
r.pt1.y = 3;
r.pt2.x = 2;
r.pt2.y = 4;
// 使用2
struct rect *p = &r;
p->pt1.x = 5; // 等价 r.pt1.x = 5
结构中的结构的数组
// 定义
struct point{
int x;
int y;
};
struct rect{
struct point pt1;
struct point pt2;
};
struct rect rects[] = {
{{1, 2}, {3, 4}},
{{5, 6}, {7, 8}}
};
// 使用
rects[0].p1.x = 1;
自定义数据类型
// typedef 关键字,声明新的类型的名字
// int
typedef int int64_t;
int64_t i = 100000;
// 字符串,Strings是10个字符串的数组
typedef *char[10] Strings;
// 在定义结构体时使用
typedef struct dates{
int a;
int b;
} Date;
// 或者
typedef struct{
int a;
int b;
} Date;
Date d = {1, 2};