声明/使用结构类型
// 声明,放在函数外面代表全局的struct date{ int year; int month; int day;};// 使用,结构可以赋值给其他结构变量,可以取地址,也可以做函数参数// 1、struct date tody;today.year = 2018today.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和ystruct 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;// 使用2struct 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 关键字,声明新的类型的名字// inttypedef 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};