【C语言】结构体

结构体定义方式

关键字:struct

struct 结构体名称{
   基本类型 变量名;
   基本类型 变量名;
   ...
};  // 注意这有 分号

struct Boy {
    char name[20];
    char gender;
    float age;
};

struct Boy {
    char name[20];
    char gender;
    float age;
} boy; // 这样定义不用初始化 boy 为全局变量

struct Boy {
    char name[20];
    char gender;
    float age;
} boy = {
    "大数据男孩", // 可以不指定 但顺序要对
    .gender = 'A',
    .age = 18.5,
}; // 初始化 并 设置默认值

初始化结构体

// 基本初始化
struct 结构体名称 变量名;
struct Boy boy;

// 初始化全部值 值的类型需要对应
struct 结构体名称 变量名 = {
     内容,
     ""
 }

struct Boy boy = {
    "大数据男孩",
    "A",
    18.2
}

// 初始化部分值
struct 结构体名称 变量名 = {
    .定义结构 = 值,
    ...
}

struct Boy boy = {
    .name = "大数据男孩",
    .gender = "A",
}

结构体使用

结构体赋值

结构体变量名.值 = 变量;
boy.name = "大数据男孩";

获取结构体的值

变量 = 结构体变量名.值
float age = boy.age;

结构体的内存占用

mark

原因:C语言的 内存对齐

取自小甲鱼视频

结构体使用

#include <stdio.h>

// 定义结构体
struct Boy {
    char name[20];
    char gender;
    float age;
};  // 注意这里有 分号

int main(){
    struct Boy boy; // 初始化结构体
    printf("输入姓名:");
    scanf("%s",boy.name);  // 数组不用 取址符
    printf("输入性别:");
    scanf("%s",&boy.gender);
    printf("输入年龄:");
    scanf("%f",&boy.age);

    printf("--------信息录入完毕---------\n\n");
    printf("基本信息:\n");
    printf("姓名:%s\n",boy.name);
    printf("性别:%s\n",&boy.gender);
    printf("年龄:%.2f\n",boy.age);

    return 0;
}

mark

结构体嵌套

// 日期结构体
struct Date {
    int year;
    int month;
    int day;
};

// 男孩结构体
struct Boy {
    char name[20];
    char gender;
    struct Date date; // 嵌套的 日期结构体
} boy = {
    .name = "大数据男孩",
    .gender = 'A',
    .date = {2020,12,15},
};

访问嵌套结构体

#include <stdio.h>

// 日期结构体
struct Date {
    int year;
    int month;
    int day;
};

// 男孩结构体
struct Boy {
    char name[20];
    char gender;
    struct Date date; // 嵌套的 日期结构体
} boy = {
    .name = "大数据男孩",
    .gender = 'A',
    .date = {2020,12,15},
};

int main(){

    printf("姓名:%s\n",boy.name);
    printf("性别:%c\n",boy.gender);
    // 嵌套的结构体 一层一层的访问
    printf("日期:%d - %d - %d",boy.date.year,boy.date.month,boy.date.day);

    return 0;
}

mark

结构体数组

struct Date {
    int year;
    int month;
    int day;
} date[2] = {
            {2020,12,15},
            {2020,12,16},
    };

访问结构体数组

#include <stdio.h>

struct Date {
    int year;
    int month;
    int day;
} date[2] = {
        {2020,12,15},
        {2020,12,16},
};

int main(){
    // 结构体数组
//    struct Date date[2] = {
//            {2020,12,15},
//            {2020,12,16},
//    };

    // 访问结构体数组的内容
    printf("date[0]: %d - %d - %d\n",date[0].year,date[0].month,date[0].day);
    printf("date[1]: %d - %d - %d\n",date[1].year,date[1].month,date[1].day);

    return 0;
}

mark

结构体指针

结构体指针本质是指针,作用是 指向一个结构体

struct Date date = {
            2020,12,15
    }; // 定义一个结构体

struct Date *pt; // 定义结构体指针

pt = &date; // 指针 指向 结构体

通过 结构体指针 访问 结构体

#include <stdio.h>

struct Date {
    int year;
    int month;
    int day;
};

int main(){
    // 先 定义该结构体
    struct Date date = {
            2020,12,15
    };
    // 定义该结构体 指针
    struct Date *pt;
    // 结构体指针 指向 结构体
    pt = &date;
    // 获取结构体值
    printf("year : %d  ",date.year);  // 结构体 直接 访问
    printf("month : %d ",(*pt).month); // 通过 结构体指针 访问,括号必须的(优先级问题) 
    printf("day : %d\n ",pt -> day); // 结构体指针 箭头 访问
    return 0;
}

mark

发表评论 / Comment

用心评论~