一,结构体的定义
- 定义的同时,初始化
-
struct Dog { char *name; int age; double height; }; struct Dog sd = {"wc", 13, 5.0};
-
- 先定义,再逐个初始化
-
struct Dog { char *name; int age; double height; }; struct Dog sd1; sd1.name = "ww"; sd1.age = 5; sd1.height = 10.9;
-
- 先定义,再一次性初始化
-
struct Dog { char *name; int age; double height; }; struct Dog sd2; // 特别注意: 结构体和数组有一点区别, 数组不能先定义再进行一次性的初始化, 而结构体可以 // 只不过需要明确的告诉系统{}中是一个结构体 sd2 = (struct Dog){"xq", 8, 8.8};
-
- 指定将数据赋值给指定的属性
-
struct Dog { char *name; int age; double height; }; // 指定将数据赋值给指定的属性 struct Dog sd3 = {.height = 1.77, .name = "ww", .age = 33};
-
- 定义结构体时,定义结构体变量
-
struct Dog { char *name; int age; double height; } sd4; sd4.age = 30;
-
- 定义结构体类型的同时定义结构体变量, 并且省略结构体名称
-
struct { char *name; int age; double height; }sd5; sd5.age = 10; // 弊端: 由于结构体类型没有名称, 所以以后就不能使用该结构体类型 // 优点: 如果结构体类型只需要使用一次, 那么可以使用该方式
-
- typeDefine定义结构体
-
typedef struct { int year; int month; int day; } MyDate2; // 结构体类型变量为 d2,并赋值 MyDate2 d2 = {2016, 5, 24};
-
- 苹果官方结构体
-
//CGSize结构体定义 struct CGSize { CGFloat width; CGFloat height; }; typedef struct CG_BOXABLE CGSize CGSize; //CGSize设置方法结构体定义 CG_INLINE CGSize CGSizeMake(CGFloat width, CGFloat height) { CGSize size; size.width = width; size.height = height; return size; } //内联函数和宏 CG_INLINE:CG_INLINE is a #define for static inline. This causes the compiler to create the code for the function inline, rather that creating a function call on the stack. See here and here for more information
-
- 仿照苹果官方的自定义结构体
-
//自定义结构体 struct ClickSize { CGFloat top; CGFloat left; CGFloat bottom; CGFloat right; }; typedef struct ClickSize ClickSize; /* 也可以用以下方法代替上述 typedef struct ClickSize { CGFloat top; CGFloat left; CGFloat bottom; CGFloat right; } ClickSize; */ //自定义结构体设置方法 CG_INLINE ClickSize ClickSizeMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) { ClickSize clickSize; clickSize.top = top; clickSize.left = left; clickSize.bottom = bottom; clickSize.right = right; return clickSize; };
-
二,存储空间
会获取结构体类型中占用内存最大的属性的大小, 然后取该大小的倍数
三,访问结构体变量的方法
- 结构体变量名称.属性;
-
struct Person { int age; char *name; double height; }; struct Person sp = {30, "ln", 1.75}; sp.name = "lnj";
-
- (&结构体变量名称)->属性;
-
struct Person { int age; char *name; double height; }; struct Person sp = {30, "ln", 1.75}; (&sp)->age = 20;
-
- (*结构体指针变量名称).属性;
-
struct Person { int age; char *name; double height; }; struct Person sp = {30, "ln", 1.75}; struct Person *sip; sip = &sp; (*sip).age = 88;
-
- 结构体指针变量名称->属性;
-
struct Person { int age; char *name; double height; }; struct Person sp = {30, "ln", 1.75}; struct Person *sip; sip = &sp; (*sip)->age = 88;
-