iOS 学习历程

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;
}
上一篇下一篇

猜你喜欢

热点阅读