18-结构体(初识)

18-1 概念

我们现在已经知道的数据类型:

复制代码
char short int long float double

但是当我们需要描述一个复杂对象时,这些数据类型单独拿出来不能满足,如:

人:名字+年龄+性别+地址+电话

书:书名+作者+出版社+定价+书号

所以,C语言就给了自定义类型的能力,自定义类型中有一种叫:结构体struct

结构体是把一些单一类型组合在一起的做法:

复制代码
struct Stu  //学生
{
	char name[20];  //名字
	int age;  //年龄
	char sex[10];  //性别
	char tele[12];  //电话号码
};

struct Stu占空间吗?

并不占空间,这里的struct Stu实质上就是个类型,只有:

复制代码
struct Stu s;

创建该类型的变量的时候才占空间

18-2 结构体的初始化

创建并初始化:

复制代码
struct Stu
{
	char name[20];
	int age;
	char sex[10];
	char tele[12];
};
int main()
{
	struct Stu s = { "zhangsan",20,"nan","15596668862" };
	return 0;
}

18-3 操作符.和->

在此,我们可以讲一下之前跳过的操作符.和->了

18-3-1 .

使用前提:有结构体对象

访问结构体对象的成员:结构体对象.成员名s.name/s.age/ s.sex/ s.tele

复制代码
struct Stu
{
	char name[20];
	int age;
	char sex[10];
	char tele[12];
};
int main()
{
	struct Stu s = { "zhangsan",20,"nan","15596668862" };
	printf("%s %d %s %s\n", s.name, s.age, s.sex, s.tele);
	return 0;
}

运行结果:

当然,只要打印的类型与结构体对象的成员对应,顺序可以改变

18-3-2 ->

使用前提:有地址/指针

结构体指针变量->成员名:ps->name/ps->age/ps->sex/ ps->tele

复制代码
struct Stu
{
	char name[20];
	int age;
	char sex[10];
	char tele[12];
};
void print(struct Stu* ps)
{
	printf("%s %d %d %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);
	printf("%s %d %d %s\n", ps->name, ps->age, ps->sex, ps->tele);
}
int main()
{
	struct Stu s = { "zhangsan",20,"nan","15596668862" };
	print(&s);
	return 0;
}

运行结果:

相关推荐
学不动CV了5 小时前
ARM单片机启动流程(二)(详细解析)
c语言·arm开发·stm32·单片机·51单片机
猫猫的小茶馆7 小时前
【STM32】通用定时器基本原理
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
pumpkin845148 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
2401_858286119 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
双叶83610 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
jyan_敬言11 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio
is081512 小时前
STM32的 syscalls.c 和 sysmem.c
c语言·stm32·嵌入式硬件
学不动CV了12 小时前
数据结构---链表结构体、指针深入理解(三)
c语言·arm开发·数据结构·stm32·单片机·链表
悠悠小茉莉13 小时前
Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)
c++·ide·vscode·python·visualstudio·visual studio
视觉人机器视觉16 小时前
Visual Studio2022和C++opencv的配置保姆级教程
c++·opencv·visual studio