C语言学习笔记————–枚举、结构体

/ 0评 / 0

枚举

        枚举是C语言中的一种基本数据类型,其实就是声明一组常数,当一个变量有几个固定的值可以选取时就可以使用枚举来声明,比如

 
enum Season {spring, summer, autumn, winter};

//可以用下面的方法来使用
enum Season {spring, summer, autumn, winter} s;

//可以省略枚举的名称
enum {spring, summer, autumn, winter} s;

s = spring; //等价于 s = 0

        其实枚举中的元素 spring, summer, autumn, winter 在C语言的编译器中会作为从0开始的整型处理,那spring = 0, summer = 1, autumn = 2, winter = 3,但是如果你在定义的时候

        enum Season {spring, summer = 2, autumn, winter};

        那 spring = 0, summer就等于 2 了,autumn = 3,winter = 4,从你赋值的开始自增。

结构体

        结构体也是C语言中的数据类型,我们使用结构体来表示一个物体的整体,这其中可以包含不同类型的多个数据,这些不同类型的数据我们称为“成员”。

 
//结构体的定义
 struct 结构体名{
    类型名1 成员名1;
    类型名2 成员名2;
    ……
    类型名n 成员名n;   
};

//比如
struct People {
    char *name; // 姓名
    int age; // 年龄
    float height; // 身高
};

struct People one;

//我们也可以同时声明变量
struct People1 {
    char *name; // 姓名
    int age; // 年龄
    float height; // 身高
} two;

//结构体也可以包含别的结构体
struct People2 {
    char *name; // 姓名
    int age; // 年龄
    float height; // 身高
    struct People three;
    struct People1 four;
};

struct People2 five;

//结构体的初始化
struct People six = {"fxd", 16, 1.75};

//使用的时候可以打点调用
five.three.age = 18;

//也可以直接将结构体的值赋给别的结构体
struct People seven = six;


//定义结构体的数组
struct People eight[5];

struct People3 {
    char *name; // 姓名
    int age; // 年龄
    float height; // 身高
} nine[5];

struct {
    char *name; // 姓名
    int age; // 年龄
    float height; // 身高
} ten[5] = {{"fxd", 16, 1.75},{"fxd", 16, 1.75}};
结构体作为函数的形参
 
struct People {
    char *name; // 姓名
    int age; // 年龄
    float height; // 身高
};

void swap(struct People peo){
     printf("修改前的形参:%d \n", peo.age);
     // 修改实参中的age
     peo.age = 10;
     printf("修改后的形参:%d \n", peo.age);
}

int main(int argc, const char * argv[]) {
    struct People peo1;
    peo1.age = 30;
    printf("修改前的实参:%d \n", peo1.age);
    // 调用test函数
    test(peo1);
    printf("修改后的实参:%d \n", peo1.age);
    return 0;
}

        运行我们发现将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。

指向结构体的指针
 
int main(int argc, const char * argv[]) {
    // 定义一个结构体类型
     struct People {
       char *name; // 姓名
       int age; // 年龄
       float height; // 身高
    };
    
    // 定义一个结构体变量
    struct People peo = {"fxd", 18, 1.75};
    
    // 定义一个指向结构体的指针变量
    struct People *p;
    
    // 指向结构体变量stu
    p = &peo;

    /*
     这时候可以用3种方式访问结构体的成员
     */
    // 方式1:结构体变量名.成员名
    printf("name=%s, age = %d \n", peo.name, peo.age);
    
    // 方式2:(*指针变量名).成员名
    printf("name=%s, age = %d \n", (*p).name, (*p).age);
    
    // 方式3:指针变量名->成员名
    printf("name=%s, age = %d \n", p->name, p->age);
    
    return 0;
}

评论已关闭。