首页 > 代码库 > 【Xcode学C-5】结构体、全局局部变量以及枚举变量的知识点

【Xcode学C-5】结构体、全局局部变量以及枚举变量的知识点

一、全局变量和局部变量


(1)全局变量定义在函数外,局部变量在函数体内,前后作用域不同,生命周期也不同。


二、结构体


(1)定义了结构体不会分配内存,只有用结构体定义了变量才会为这个变量分配内存。第一个成员的地址就是结构体变量的地址。

int main(int argc, const char * argv[]) {
    //结构体的格式
    struct person{
        int age;
        char *name;
    };
    //定义变量
    struct person p1;
    //赋值,多种赋值方式,比如 struct person p2={10,"tom"};
    p1.age=28;
    p1.name="andy";
    //访问
    printf("%s\n",p1.name);
    return 0;
}

(2)分配的空间大小是占用最大字节成员变量的倍数。比如上述结构体,int是4字节,char *是8字节,一共是12字节,但为了要是最大字节成员的整数倍,所以每个结构体变量一共是16字节。


(3)还有很多种方式定义结构体变量。除了以上方法,还可以在定义结构体的同时在后面分号前面加个p,直接定义一个变量。还有一种方式是匿名结构体,这种匿名结构体只能一次性定义变量,因为后续不能复用。


(4)结构体数组。就是在定义结构体变量的时候批量定义并初始化。如struct person p[3]={{},{},{}};。但很少用。结构体数组只能在定义的时候初始化。


(5)结构体和数组一样,不可以先定义变量,然后再赋值。


(6)指向结构体的指针,因为是指向结构体的,所以定义方式就是struct person *p;即可。p=&p1;就是把这个指针指向p1。重点是如何取值。可以用(*p).age;但是更普遍的是p->age。


(7)结构体,当然可以嵌套使用。


(8)结构体相比数组最大特点是,里面可以存放不同类型数值,而数组只能是同种数值。


三、枚举变量

int main(int argc, const char * argv[]) {
    //尽量不要使用数值,所有数值都是魔鬼数值
    //int gender=0;
    
    //定义一个枚举
    //我们可以给MAN=100,那么下面的值是一次递增的,即WOMAN是101
    enum Gender{
        MAN,
        WOMAN
    };
    //使用并定义一个枚举变量gender1
    enum Gender gender1=MAN;
      
    return 0;
}


【Xcode学C-5】结构体、全局局部变量以及枚举变量的知识点