首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >结构体初阶

结构体初阶

作者头像
胖咕噜的稞达鸭
发布2025-10-22 14:44:49
发布2025-10-22 14:44:49
890
举报
文章被收录于专栏:C++初阶高阶C++初阶高阶

一.结构体的声明

结构的基础知识:

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

j结构成员的类型:可以是标量,数组,指针,也可以是其他结构体。

代码语言:javascript
复制
//结构体声明

#include<stdio.h>


struct stu        //struct是结构体关键字,stu是结构体类型的名字
{
    //大括号中是成员变量,是结构体的相关属性
    //拿类型(可以理解为图纸)创建了main 函数中的对象s(可以理解为用图纸创建出房子)
    char name[20];
    int age;
    char id[20];
}stu;    //分号不能丢

int main(void)
{
    //这里的s是局部变量
    struct stu s = { {'w',20,3.14},"张三",30,"20250424"};
    return 0;
}

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

代码语言:javascript
复制
#include<stdio.h>

struct B
{
	char c;
	short s;
	double d;
};

struct stu        //struct是结构体关键字,stu是结构体类型的名字
{
	struct B sb;    //结构体成员的类型是sb,结构体成员可以是另外一个结构体
	char name[20];
	int age;
	char id[20];
}stu;    //分号不能丢

int main(void)
{
	//这里的s是局部变量
	struct stu s = { {'w',20,3.14},"张三",30,"20250424" };    //结构体嵌套初始化
	//printf("%c\n", s.sb.c);	//运行结果为w
	//printf("%s\n", s.id);	//运行为20250424
							//为什么sb后面不用箭头,因为sb是个结构体变量,不是指针,所以访问自己的成员用.就行
	struct stu* ps = &s;
	printf("%c\n", (*ps).sb.c);	//w
	printf("%c\n", ps->sb.c);	//w
	return 0;
}

三.结构体传参

代码语言:javascript
复制
//下面写一个函数打印s的内容

#include<stdio.h>

struct B
{
	char c;
	short s;
	double d;
};

struct stu       
{
	struct B sb;    
	char name[20];
	int age;
	char id[20];
}stu;   

void print1(struct stu t)
{
	printf("%c %d %lf %s %d %s\n", t.sb.c, t.sb.s, t.sb.d, t.name, t.age, t.id);
	//打印出 w,20,3.14,张三,30,20250424

}

void print2(struct stu* ps)
{
	printf("%c %d %lf %s %d %s\n", ps->sb.c, ps->sb.s, ps->sb.d, ps->name, ps->age, ps->id);
	//打印出 w,20,3.14,张三,30,20250424
}
int main(void)
{
	struct stu s = { {'w',20,3.14},"张三",30,"20250424" };    
	//写一个函数打印s的内容
	print1(s);		//print1函数打印s要传参,print1在主函数内传了一个结构体对象,所以在函数调用时print1里面传了一个结构体对象t来接收s,不需要返回,前+void,打印t就是打印s的内容
	

    print2(&s);		//用print2来打印s,这里传的是一个结构体变量的地址&s,在实现的时候,地址传过来用指针变量,ps调用的是print2,指向的是s,把s的地址传过去,通过ps打印里面的信息,ps是结构体指针
	return 0;
}

两次打印出的结果是一样的,但是:

一.传值调用,参数传参,s传过去,需要t临时开辟空间来接收s传过来的数据;

二.传址调用,&s传过去的只是一个地址编号,不需要开辟空间,效率高,还可以改变s 里面的数据。

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.结构体的声明
  • 二.结构体变量的初始化和定义
  • 三.结构体传参
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档