结构体(C语言)

目录

自定义类型-结构体

结构体类型

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

结构体成员的访问

结构体传参


自定义类型-结构体

假设我们要存储一个学生的身份信息,包括学号,姓名 ... 等 此时我们可以自己定义一种类型,来封装这些信息,那么此时我们就可以运用到结构体

结构体类型

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

结构的成员可以是变量、数组、指针、也可以是其它结构体!

在C语言中用 stucrt 来定义结构体类型 

#include <stdio.h>

// 定义结构体类型
struct STU{
 int avg;
 char name[10];
 float hight;
 double wight;
};

int main()
{


    return 0;
} 

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

我们知道 整型类型 定义变量: int a=0;

               浮点型 定义变量:float b=0.0;

               指针变量 :int* p=NULL;

以此类推结构体也是一种类型,它也可以定义变量,变量可以初始化!

具体看代码:

#include <stdio.h>

//创建结构体类型
struct STU {
	char name[10];
	int age;
	float hight;
	double wight;
}S1 = { "李真人",289,1.78f,186 }; 
// 直接在创建类型的时候创建结构体变量 S1,并初始化;

struct STU S2 = { "万孔林",18,1.60f,125 };//定义结构体全局变量 S2;

int main()
{
	struct STU S3 = { "悬手低涂",988,1.88f,149 };//定义结构体局部变量S3并初始化!
	struct STU * p = NULL;  //结构体指针的定义
	p = &S1;  // 让结构体指针指向结构体变量S1	

   return 0;
}

结构体成员的访问

结构体变量的访问有两种访问方式

第一种是 . 操作符访问:结构体变量.成员变量名

第二种是 -> 操作符访问:指针的访问形式:指针->成员变量 

#include <stdio.h>

//定义结构体类型
struct STU {
	char name[10];
	int age;
	float hight;
	double wight;
};

int main()
{
	//定义结构体变量
	struct STU S = { "雷古",58,1.78f,145 };

	//用 点 . 操作符访问成员
	printf("%s %d %f %lf\n", S.name, S.age, S.hight, S.wight);

	// 定义结构体指针
	struct STU * p = &S;

	//用 -> 操作符访问成员
	printf("%s %d %f %lf\n", p->name, p->age, p->hight, p->wight);

	//以指针解引用的方式访问成员
	printf("%s %d %f %lf\n", (*p).name, (*p).age, (*p).hight, (*p).wight);

	return 0;
}

结构体传参

结构体在函数传参的时候,有两种方式:

1、传值:直接传结构体

2、传地址:传结构体指针

结构体在传参的时候建议传结构体的地址

原因:

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

struct stu {
	char namr[10];
	int age;
	float hight;
	double wight;
};

void Prin(struct stu s)
{
	// 结构体变量 . 成员变量 访问
	printf("%s %d %f %lf\n", s.namr, s.age, s.hight, s.wight);
}

void dayin(struct stu* p)
{
	// 指针->成员变量访问 
	printf("%s %d %f %lf\n", p->namr, p->age, p->hight, p->wight);

	// 指针解引用 . 成员变量访问
	printf("%s %d %f %lf\n", (*p).namr, (*p).age, (*p).hight, (*p).wight);
}

int main()
{
	struct stu s = { "大帝蟒",28,1.79f,189 };
	struct stu* p = &s;

	Prin(s);//传值,传结构体
	dayin(p);// 传址,传结构体指针
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值