c语言笔记---结构体

1.什么是结构体

官方的解释是:**结构体是一些值的集合,这些值称为成员变量。**结构体的每个成员可以是不同类型的变量。首先先举一个关于学生信息的例子,学生包括:姓名(char),性别(char),年龄(int)等信息。

2.定义,创建变量

结构体定义由关键字 struct 和结构体名组成,结构体名可自行定义。

(1)定义一个结构体

cs 复制代码
struct Student {  // 结构体名
    //成员
	char name[10];
	int age;
	char gender[5];
};

注意在创建好结构体之后要加上 ;(分号)

(2)直接创建一个变量

cs 复制代码
#include<stdio.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
}stu;

结构体尾部创建了一个结构体变量

(3)创建好结构体后创建一个结构体变量

cs 复制代码
#include<stdio.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
};
struct Student stu;

(4)创建局部变量

cs 复制代码
#include<stdio.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
};
int main()
{
	struct Student stu;
	return 0;
}

在main中创建的是局部变量,只在main函数中有效。

(4)结构体数组

cs 复制代码
#include<stdio.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
}person[3];  //3个人
cs 复制代码
//可以直接初始化
#include<stdio.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
}person [3] = {    //也可以不给长度person []
    { "zhaosan",18,"男" },
    { "qian",19,"男" }
    { "sun",20,"男" }
};

3.初始化

(1)直接初始化

cs 复制代码
#include<stdio.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
};
int main()
{
	struct Student stu = { "zhaosan",18,"男" };
	return 0;
}
cs 复制代码
#include<stdio.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
}stu = { "zhaosan",18,"男" };

(2)逐个赋值

cs 复制代码
#include<stdio.h>
#include<string.h>
struct Student
{
	char name[10];
	int age;
	char gender[5];
};
int main()
{
	struct Student stu;
	strcpy(stu.name, "zhaosan");
	stu.age = 18;
	strcpy(stu.gender, "男");
	return 0;
}

当要赋的值超出最大长度strcpy会造成缓冲区溢出风险, 可用strncpy或snprintf

4. 使用

cs 复制代码
#include<stdio.h>
#include<string.h>
struct Student {
	char name[10];
	int age;
	char gender[5];
}person [3] = {
    { "zhaosan",18,"男" },
    { "qian",19,"男" }
    { "sun",20,"男" }
};
int main()
{
    printf("age=%d", person[0].age); //打印第一个人的年龄
	return 0;
}
相关推荐
龙仔7251 小时前
RustDesk 1.5.0 升级安装故障处理笔记
笔记
星恒随风2 小时前
Linux基础IO万字详解:从文件描述符fd到重定向、FILE缓冲机制及MiniShell升级
linux·运维·笔记·学习·状态模式
喜欢打篮球的普通人2 小时前
MiniMind 学习笔记(二十二):数学 Cookbook——把概率空间、期望、似然一次讲明白
人工智能·笔记·学习
乐橙开放平台3 小时前
通道国标 ID 贴反会串店:海康大华宇视摄像头怎么用 GB28181 统一接入?
网络·笔记·物联网·自动化·音视频·智能家居
ab1237684 小时前
Spring Integration 完整笔记 + 和 spring-integration-mqtt、Paho、EMQX 的关系
java·笔记·spring
ACP广源盛139246256735 小时前
Type-C 扩展坞方案选型笔记|国产 DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP 评估
开发语言·笔记·硬件架构·硬件工程·hdmi·国产芯片
旖旎夜光5 小时前
【LangGraph实战】LangGraph 学习笔记(四):持久化——从线程记忆到跨会话长期记忆
人工智能·笔记·python·学习·ai编程·langgraph
kdxiaojie5 小时前
MPU6050学习
笔记·学习·mpu6050
qq_2842740516 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_2842740517 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造