结构体的学习

目录

基础知识 

结构的声明和初始化

无变量列表

 有变量列表

结构体内有结构体的初始化 

打印

结构体变量.成员变量(.操作符)

结构体指针->成员变量(->操作符)

总结


基础知识

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量

一般在 main() 函数外部声明,但在 main() 里面也可以声明,但只能在内部使用,有限制

结构的成员可以是标量、数组、指针,甚至是其他结构体


结构的声明和初始化

无变量列表

struct student
{
	char name[20];
	char tele[12];
	float score;
};

struct - 结构体关键字

student - 标记,稍后程序中可以使用该标记引用该结构

struct student 是用户定义的结构体类型

({ })中的是成员列表

name , tele , score - 结构体的成员名


后面的程序中,我们可以这样声明:

#include <stdio.h>

struct student
{
	char name[20];
	char tele[12];
	float score;
};


int main()
{
	struct student stu = { "张三","13838389438", 114.5};

	return 0;
}

这里,stu 是定义的结构体变量,是局部变量,把 stu 声明为一个使用 student 结构布局的结构变量

 有变量列表

struct student
{
	char name[20];
	char tele[12];
	float score;
}s1, s2; // 多了变量,是全局变量

这里的 s1 和 s2 是使用 struct student 结构体类型创建的两个变量,如果放在({ })外面定义,是全局变量

结构体内有结构体的初始化 

#include <stdio.h>

struct student
{
	char name[20];
	char tele[12];
	double score;
};

struct St
{
	struct student s1;
	char sex[5];
	double height;
};

int main()
{
	struct student stu = { "张三","13838389438", 114.5};
	struct St St1 = { {"李四","13812345678", 138.5},"男", 181.1 }; // 初始化

	return 0;
}

打印

结构体变量.成员变量(.操作符)

#include <stdio.h>

struct student
{
	char name[20];
	char tele[12];
	double score;
};

struct St
{
	struct student s1;
	char sex[5];
	double height;
};

int main()
{
	struct student stu = { "张三","13838389438", 114.5 };
	struct St St1 = { {"李四","13812345678", 138.5},"男", 181.1 };

    // 结构体对象打印
	printf("%s %s %.1f\n", stu.name, stu.tele, stu.score);
	printf("%s %s %.1f %s %.1f\n", St1.s1.name, St1.s1.tele, St1.s1.score, St1.sex, St1.height);

	return 0;
}

在这里,stu,St1,s1 都是结构体变量,所以用 .操作符

结构体指针->成员变量(->操作符)

#include <stdio.h>

struct student
{
	char name[20];
	char tele[12];
	double score;
};

struct St
{
	struct student s1;
	char sex[5];
	double height;
};

void print1(struct student stu1) //形参
{
	printf("%s %s %.1f\n", stu1.name, stu1.tele, stu1.score);
}

void print2(struct student* pstu) // 结构体指针
{
	printf("%s %s %.1f\n", pstu->name, pstu->tele, pstu->score);
}

int main()
{
	struct student stu = { "张三","13838389438", 114.5 };
	struct St St1 = { {"李四","13812345678", 138.5},"男", 181.1 };

	print1(stu); //结构体传参,传结构体变量本身

	print2(&stu); //传参,传结构体地址

	return 0;
}

总结

  • 函数传参时,参数是需要压栈的。如果传递一个结构体对象时,结构体过大,参数压栈的系统开销比较大,所以会导致性能下降(形参是实参的一份临时拷贝)
  • 结构体传参时,要传结构体的地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值