(C语言)初阶结构体

一、结构体类型的声明

1、结构的基础知识

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

2、结构体类型的声明

struct  Stu//自己起的结构体类型名称

{

      member-list;

}variable-list;//这里创建的变量是全局变量。而在main函数中创建的变量是局部变量。

3、结构成员的类型

结构成员的类型可以是标量、数组、指针或结构体。

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

1、定义:

struct Stu
{
	char name;
	int age;
	float weight;
}s1;//结构体变量的定义,全局变量
struct Stu s2;//结构体变量的定义,全局变量
int main()
{
	struct Stu s3;//结构体变量的定义,局部变量
	return 0;
}

2、初始化:用{}进行初始化。

struct m
{
	char a;
	int b;
	float c;
};
struct Stu
{
	struct m m1;
	char name;
	int age;
	float weight;
};
int main()
{
	struct m m1 = { 'a', 3, 3.14 };//结构体变量的初始化
	struct Stu s = { { 'a', 3, 3.14 }, 'M', 18, 50.2 };//结构体变量的初始化,嵌套初始化
    struct Stu s1={.name='G',.weight='56.2'};
	return 0;
}

三、结构体成员访问

​
​
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Stu
{
	char name[20];
	int age;
	double score;
};
int main()
{
	struct Stu s = { "阿大", 20, 85.5 };
	printf("%s  %d  %lf\n",s.name,s. age,s.score);//第一种访问的方法
	struct Stu* ps = &s;
	printf("%s  %d  %lf\n",(*ps).name,(*ps).age,(*ps).score);//第二种访问的方法
	printf("%s  %d  %lf\n", ps->name, ps->age, ps->score);//第二种方法的改进
	return 0;
}

​

​

四、结构体传参

​
struct m
{
	char a;
	int b;
	float c;
};
struct Stu
{
	struct m m1;
	char name;
	int age;
	float weight;
};
void print1(struct Stu x)
{
	printf("%c %d %f %c %d %f\n", x.m1.a, x.m1.b, x.m1.c, x.name, x.age, x.weight);
}
void print2(struct Stu* x)
{
	printf("%c %d %f %c %d %f\n",x->m1.a,x->m1.b,x->m1.c,x->name,x->age,x->weight);
}
int main()
{
	struct Stu s = {{ 'a', 4, 3.14 },'M', 18, 50.2 };
	//写一个打印s的函数。
	print1(s);//传值调用
	print2(&s);//传址调用,这种方法更好一些,应当首选。
	return 0;
}

​

传值调用与传址调用应当首选传址调用,原因是:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会算法的笨小孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值