初阶C语言|结构体

本文介绍了C语言中结构体的声明、变量的定义与初始化,包括如何访问结构体成员以及通过点操作符和指针访问结构体。同时,文章讨论了结构体在函数传参中的传值和传址两种方式,并指出传址在处理大型结构体时的性能优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、结构体的声明

结构是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的成员
结构体的成员可以是标量、数组、指针,甚至是其他结构体。

1.1结构体的声明

struct stu
{
	char name[20];//姓名
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
};//分号不能丢

struct是定义结构体的关键字,stu是定义结构体取得一个名字,也可以省略,大括号里面是结构体的成员,定义结构体是一条语句需要加分号

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

struct stu
{
	char name[20];//姓名
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
}S;//声明类型的同时定义变量S
struct stu a;//也可这样用该类型定义变量a
struct stu b={"张三",18,"男","1314"};//初始化:定义变量的同时赋值

stuct point
{
    int x;
    int y;
    struct stu c;//结构体嵌套
}p={4,3{"丽丽",19,"女","520"}};//结构体嵌套初始化

二、结构体成员的访问

  • 结构体成员访问

结构体变量的成员访问是通过点操作符(.)访问的。点操作符接受两个操作数

struct stu
{
	char name[20];//姓名
	int age;//年龄
};
struct stu S;

在这里插入图片描述
S的成员有name和age;那如何访问成员?

#include <stdio.h>
#include <string.h>
struct stu
{
	char name[20];//姓名
	int age;//年龄
};
struct stu S ;
int main()
{
	
	S.age = 20;//使用.访问age成员
	strcpy(S.name, "张三");
	printf("%d %s", S.age, S.name);
	return 0;
}

对于结构体字符串的赋值,不能直接赋值,如果我们直接使用 S.name = “李华” 这样的赋值语句来给一个结构体变量 S 的成员 name 赋值,实际上是将一个字符串常量的地址赋值给了指针 S.name,而结构体成员与指针有本质的不同,不能直接进行赋值操作。 如果要给结构体变量
S 的成员 name 赋值,可以使用 strcpy 函数来实现。

  • 结构体指针访问指向变量的成员
#include <stdio.h>
struct stu
{
	char name[20];//姓名
	int age;//年龄
};
void print(struct stu* ps)
{
	printf("name=%s age=%d\n", (*ps).name, (*ps).age);
	//使用结构体指针访问结构体成员
	printf("name=%s age=%d\n", ps->name, ps->age);
}
int main()
{
	struct stu s = { "zhangsan",20 };
	printf(&s);//结构体地址传参
	return 0;
}

结构体指针访问成员有两种访问形式,一种是.操作符访问成员,一种是->访问成员

三、结构体传参

#include <stdio.h>
struct stu
{
	int data[1000];
	int num;
};
struct stu s = { {1,2,3,4},1000 };
//结构体传参,传值
void print1(struct stu s)
{
	printf("%d\n", s.num);
}
//结构体传参,传址
void print2(struct stu* ps)
{
	printf("%d\n", ps->num);
}
int main()
{
	print1(s);//结构体地址传参
	print2(&s);
	return 0;
}

结构体传参支持传值和传址,由于函数传参的时候,是需要压栈的,传值的时候,形式参数是实际参数的临时拷贝,会在内存上开辟一块空间,即压栈,如果结构体过大,会导致压栈的系统开销比较大,从而导致性能下降,而传地址占的空间就很小,所以对比以上两种传参方式,首选传址
结论:结构体传参的时候,要传结构体的地址。

内容概要:本文介绍了多种开发者工具及其对开发效率的提升作用。首先,介绍了两款集成开发环境(IDE):IntelliJ IDEA 以其智能代码补全、强大的调试工具和项目管理功能适用于Java开发者;VS Code 则凭借轻量级和多种编程语言的插件支持成为前端开发者的常用工具。其次,提到了基于 GPT-4 的智能代码生成工具 Cursor,它通过对话式编程显著提高了开发效率。接着,阐述了版本控制系统 Git 的重要性,包括记录代码修改、分支管理和协作功能。然后,介绍了 Postman 作为 API 全生命周期管理工具,可创建、测试和文档化 API,缩短前后端联调时间。再者,提到 SonarQube 这款代码质量管理工具,能自动扫描代码并检测潜在的质量问题。还介绍了 Docker 容器化工具,通过定义应用的运行环境和依赖,确保环境一致性。最后,提及了线上诊断工具 Arthas 和性能调优工具 JProfiler,分别用于生产环境排障和性能优化。 适合人群:所有希望提高开发效率的程序员,尤其是有一定开发经验的软件工程师和技术团队。 使用场景及目标:①选择合适的 IDE 提升编码速度和代码质量;②利用 AI 编程助手加快开发进程;③通过 Git 实现高效的版本控制和团队协作;④使用 Postman 管理 API 的全生命周期;⑤借助 SonarQube 提高代码质量;⑥采用 Docker 实现环境一致性;⑦运用 Arthas 和 JProfiler 进行线上诊断和性能调优。 阅读建议:根据个人或团队的需求选择适合的工具,深入理解每种工具的功能特点,并在实际开发中不断实践和优化。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值