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;
}

运行结果:

相关推荐
念恒1230618 分钟前
进程--程序地址空间下篇(进程地址空间)
linux·c语言
爱编码的小八嘎19 分钟前
C语言完美演绎8-20
c语言
Tel199253080043 小时前
ENDAT2.2 协议信号转 SSI /BISS-C转换卡 ENDAT2.2 协议信号转DMC多摩川高速协议转换器 互转卡
c语言·开发语言·网络
三品吉他手会点灯3 小时前
C语言学习笔记 - 12.C语言简介 - 一元二次方程详解
c语言·笔记·学习
记录无知岁月4 小时前
【C/C++】头文件包含问题分析
c语言·开发语言·c++
笨笨饿5 小时前
66_C语言与微控制器底层开发
linux·c语言·网络·数据结构·算法·机器人·个人开发
HABuo5 小时前
【linux网络基础(二)】理解端口号&UDP、TCP协议&网络字节序
linux·服务器·c语言·网络·c++·ubuntu·centos
qeen877 小时前
【算法笔记】二分查找与二分答案
c语言·c++·笔记·学习·算法·二分
SDAU20057 小时前
Arduino编程CH552
c语言·开发语言·单片机
明飞19878 小时前
C输出打印格式占位符
c语言