{{format('0')}} {{format('548')}} {{format('4243')}}

【C语言】结构体 [ 编程杂谈 ]

大数据男孩 文章 正文

想做一个技术博客,奈何实力不够
分享

明妃

{{nature("2022-08-14 17:23:19")}}更新

结构体定义方式

关键字: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]()

评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12521')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9409')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7404')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('4878')}}人已阅读

目录

标签云

C语言 结构体

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏