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

运行结果:

相关推荐
bubiyoushang8881 小时前
基于 C/C++ 的 MQTT 物联网通信协议实现
c语言·c++·物联网
三品吉他手会点灯2 小时前
C语言学习笔记 - 46.运算符和表达式 - 运算符4 - 对初学运算符的一些建议
c语言·开发语言·笔记·学习
小四季豆3 小时前
《数据结构与算法》-顺序表:算法落地的第一个线性结构
c语言·数据结构·算法
jimy13 小时前
C语言中使用“结构体 + 函数指针”来模拟面向对象编程(OOP
c语言
三品吉他手会点灯4 小时前
C语言学习笔记 - 45.运算符和表达式 - 运算符3 - 逻辑运算符
c语言·笔记·学习
玖玥拾4 小时前
C/C++ 基础笔记(五)
c语言·c++·指针
QT-Neal4 小时前
C/C++ 程序段的概念与分类
c语言·c++
Luminous.5 小时前
C语言--day25
c语言·开发语言
luj_17685 小时前
硝酸核关联假说缺乏实验证据
c语言·开发语言·c++·经验分享·算法
无忧.芙桃6 小时前
数据结构之单链表
c语言·开发语言·数据结构