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

运行结果:

相关推荐
茶猫_2 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
ö Constancy3 小时前
Linux 使用gdb调试core文件
linux·c语言·vim
lb36363636363 小时前
介绍一下strncmp(c基础)
c语言·知识点
wellnw3 小时前
[linux] linux c实现共享内存读写操作
linux·c语言
珹洺6 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
.Cnn6 小时前
用邻接矩阵实现图的深度优先遍历
c语言·数据结构·算法·深度优先·图论
2401_858286116 小时前
101.【C语言】数据结构之二叉树的堆实现(顺序结构) 下
c语言·开发语言·数据结构·算法·
寻找码源7 小时前
【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】
c语言·数据结构·算法·字符串·kmp
带多刺的玫瑰9 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
陌小呆^O^9 小时前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp