iOS 学习心得记录之:C语言结构体定义的六中模式
2017-02-07 本文已影响11人
人话博客
#include <stdio.h>
int main(int argc, const char * argv[]) {
//第1种,匿名结构体,不需要结构体名,只需要结构体变量,只使用一次。
struct {
char *title;
} someStruct;
someStruct.title = "我是匿名结构体";
printf("%s\n",someStruct.title);
//标准的结构体定义方式(确定结构体的类型)
//第2种 相当于声明了一个 数据类型,类型名称是 Book
struct Book
{
char *title;
float price;
};
//使用的时候比较怪异,必须在类型名前面还要加上一个 struct 关键字。
//需要加上声明关键字 和 类型名称
//就有点类似 java 里 我声明了一个类,class Person 在使用的使用不能 person 而需要 class Person.. (这有一点反直觉)
struct Book book1;
book1.title = "C Primer Plus";
book1.price = 75.50f;
printf("title = %s price = %.2f\n",book1.title,book1.price);
//第3种 ,声明结构体的同时声明结构体变量。
struct Student {
char *name;
float weight;
float height;
} stu1;
stu1.name = "张三";
stu1.weight = 75.5;
stu1.height = 175.50;
printf("姓名 = %s 身高 = %.2f 体重 = %.2f\n",stu1.name,stu1.weight,stu1.height);
//第4种,使用typedef 对已有的结构体类型取别名。
//我们给Student 结构体去别名叫 GoodBoy (这里仍然要加上一个 struct)
typedef struct Student GoodBoy;
GoodBoy boy1 = { .name = "jack",.weight = 88.0,.height = 182.2};
printf("boy1 %s %.2f %.2f\n",boy1.name,boy1.weight,boy1.height);
//第5种,使用typedef 在定义 结构体的时候,不省略结构体原来的名字,取别名
typedef struct Dog {
char *name ;
float weight;
int age;
} Samoyed;
//我们可以使用原来的名字 Dog
struct Dog d1 = {.name = "萨摩耶",.weight = 22.22f,.age = 1};
printf("d1.name = %s d1.weight = %.2f d1.age = %d\n",d1.name,d1.weight,d1.age);
//也可以使用下面定义的别名(使用别名的时候,就可以省略一个struct关键字了)..这也是我个人最常用的方法,好处是可以节省一个 struct 关键字的输入
Samoyed d2 = {.name = "哈士奇",.weight = 22.22f,.age = 1};
printf("d2.name = %s d2.weight = %.2f d2.age = %d\n",d2.name,d2.weight,d2.age);
//第6种,省略结构体的原名,直接使用typedef定义一个新名字
typedef struct {
float price;
char *brand;
} Computer;
Computer c = {.price = 12888.00f,.brand = "MacBookPro"};
printf("price = %.2f brand = %s\n",c.price,c.brand);
//最后总结:
//1.匿名结构体,值需要用一次,可以使用 struct {} 变量名
//2.标准的结构体, struct 结构体名 {}
//3.声明结构体的同时,接着声明一个结构体变量 struct 结构体名 {} 结构体变量名
// --------- 特别注意,使用typedef 定义结构体的时候,原来的结构体变量名此时就变成了结构体本身替换的名字,且在使用的使用可以省略一个struct关键字。
//4.使用typedef 给已经存在的结构体取别名 typedef existsStruct newStructName
//5.使用typedef 定义标准结构体 typedef struct 结构体名 {} 结构体别名
//6.使用typedef 定义省略结构体名只有别名的结构体 typedef struct {} 结构体别名
return 0;
}