结构体定义方式
关键字:
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;
结构体的内存占用
原因: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; }
结构体嵌套
// 日期结构体 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; }
结构体数组
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; }
结构体指针
结构体指针
本质是指针
,作用是指向
一个结构体
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; }