栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言结构体】初阶

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言结构体】初阶

目录
  • 1. 结构体的声明
    • 1.1 结构的基本知识
    • 1.2 结构体声明
    • 1.3 结构成员的类型
    • 1.4 结构体变量的定义和初始化
  • 2. 结构体成员的访问
  • 3. 结构体传参

1. 结构体的声明 1.1 结构的基本知识

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

1.2 结构体声明
结构体关键字 结构体标签(随意)
struct tag
{
   member-list;
   成员列表
}variable-list;
变量列表

举例,定义人这个类型:

//声明的结构体类型
struct Peo
{
	char name[20];
	char tele[12];
	char sez[5];
	int height;
}p1, p2;

这里的p1和p2是通过struct Peo结构体类型创建的两个变量,并且是全局结构体变量。建议少用全局的变量,因此可以改成下面这种在主函数内部创建的方法:

struct Peo
{
	char name[20];
	char tele[12];
	char sez[5];
	int height;
};
int main()
{
	struct Peo p1 = { 0 }	;
	//结构体变量的创建
	//有了类型,就可以通过类型来创建变量
	return 0;
}
//可以在主函数内部定义结构体,但没意义


1.3 结构成员的类型

可以是标量(int float double…),数组,指针,甚至是其它结构体。

1.4 结构体变量的定义和初始化

结构体可以嵌套:

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int height;
}p2, p3;
struct Peo p4, p5;
//这里p2-p5都是全局结构体变量

struct St
{	   
	//在St里嵌套一个结构体变量
	struct Peo p;
	int num;
};

int main()
{
	//给p1初始化
	struct Peo p1 = { "张三", "19816288003", "男", 185 };
	//s是结构体变量,里面还有结构体变量p,需要两个大括号
	//内部大括号初始化p,外部初始化s
	struct St s = { {"lisi","11111111111","girl",165},100 };
	
	//打印结构体成员
	printf("%s %s %s %dn", p1.name, p1.tele, p1.sex, p1.height);
	printf("%s %s %s %d %dn", s.p.name, s.p.tele, s.p.sex, s.p.height, s.num);
	return 0;
}


2. 结构体成员的访问

上面打印成员变量用到的是.操作符,下来用->操作符来操作。

使用箭头操作符,必须是指针变量。首先需要取出p1变量的地址,封装一个打印函数,把&p1作为实参传过去,形参就需要一个结构体指针来接收,然后利用箭头找到每个成员名并打印:

void print(struct Peo* p)
{
	printf("%s %s %s %dn", p->name, p->tele, p->sex, p->height);
}
int main()
{
	//给p1初始化
	struct Peo p1 = { "张三", "19816288003", "男", 185 };
	//s是结构体变量,里面还有结构体变量p,需要两个大括号
	//内部大括号初始化p,外部初始化s
	struct St s = { {"lisi","11111111111","girl",165},100 };

	print(&p1);
	return 0;
}

3. 结构体传参

上面两种传参方式都可以打印出相同的信息,那么有什么区别,哪种方法最好?

答案是:首选print2函数。

函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

结构体传参的时候,要传结构体的地址。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号