C语言结构体介绍

本文详细介绍了C语言中结构体的基础知识,包括结构体声明、成员类型、结构体变量的定义和初始化过程,以及结构体成员的访问方式和结构体传参的注意事项。
摘要由CSDN通过智能技术生成


前言

C语言结构体的基础知识,结构体的声明,结构体成员的类型,结构体变量的定义和初始化,结构体变量定义,结构体变量初始化,结构体成员的访问,以及结构体传参。


一、结构的基础知识

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

二、结构的声明

结构体声明的内容如下:

struct tag
{
	member-list;// 成员列表
}variable-list; //注意分号不能丢
  • 说明
  • struct 是结构体的关键字
  • tag 是结构体标签,可以自己定义
  • member-list 是成员列表,可以是不同类型的成员变量。
  • variable-list 结构体变量,可以在创建类型的同时直接创建结构体变量。
struct Peo1
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct Peo2
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
}p1, p2;
// 这里的p1 和 p2是基于struct Peo2创建的结构体变量
// 并且结构体类型的声明在main函数外,所以是p1和p2全局变量
int main()
{
	return 0;
}

三、结构体成员的类型

  • 结构体成员可以是标量、数组、指针,甚至是其他结构体。
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct S
{
	struct Peo p; // 结构体变量 p 作为 struct S 的结构体成员
	int num;
	float pi;
};

int main()
{
	return 0;
}

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

1. 结构体变量的定义

    1. 可以直接在创建结构体类型的同时创建结构体变量。
    1. 可以使用 struct + 标签名 + 变量名 来创建全局或局部的结构体变量
// 结构的声明
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
}p1,p2; // p1 p2 是全局的结构体变量

struct Peo p3; // p3 也是全局的结构体变量

int main()
{
	struct Peo p4; // p4 局部的结构体变量
	return 0;
}
  • 说明
  • 结构体类型也可以在main函数中创建,创建位置不同,则作用域不同。
  • 一般情况下结构体类型都创建在全局。
  • 结构体变量的作用域取决于定义结构体变量的位置,如上 p1 p2 p3就是全局变量,p4是局部变量。

2. 结构体变量的初始化

  • 按照结构体成员变量的类型初始化即可。
  • 结构体类型可以不完全初始化。
// 结构的声明
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct S
{
	struct Peo p; // 结构体变量 p 作为 struct S 的结构体成员
	int num;
	float pi;
};

int main()
{
	struct Peo stu = {"张三", "男", "15588886666", 18};
	struct S class = { {"lisi", "女", "15588886666", 20}, 100, 3.1415f };
	return 0;
}
  • 结构体类型中包含结构体,只要按照加{},按照成员变量的顺序初始化即可

五、结构体成员的访问

  • 结构体成员有两种访问方式
    1. 结构体对象 + . + 成员变量
    1. 结构体指针 + -> + 成员变量
#include <stdio.h>
// 结构的声明
struct Peo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
};

struct S
{
	struct Peo p; // 结构体变量 p 作为 struct S 的结构体成员
	int num;
	float pi;
};

void print1(struct Peo stu )
{
	printf("%s %s %s %f\n", stu.name, stu.sex, stu.tele, stu.age); // 通过结构体对象.成员变量访问
}

void print2(struct Peo* s)
{
	printf("%s %s %s %f\n", s->name, s->sex, s->tele, s->age); // 通过结构体指针->成员变量访问
}

int main()
{
	struct Peo stu = { "张三", "男", "15588886666", 18 };
	struct S class = { {"lisi", "女", "15588886666", 20}, 100, 3.1415f };

	printf("%s %s %s %d\n", stu.name, stu.sex, stu.tele, stu.age); 
	//张三 男 15588886666 18
	printf("%s %s %s %d %d %f\n", class.p.name, class.p.sex, class.p.tele, class.p.age, class.num, class.pi);
	//lisi 女 15588886666 20 100 3.141500

	print1(stu);
	print2(&stu);
	return 0;
}

六、结构体传参

  • 函数形参是实参的一份临时拷贝。所以若直接传递结构体对象,会降低性能。
  • 在结构体传参时,尽量采用结构体地址作为参数

总结

C语言结构体的基础知识,结构体的声明,结构体成员的类型,结构体变量的定义和初始化,结构体变量定义,结构体变量初始化,结构体成员的访问,以及结构体传参。

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值