C语言结构体的应用

目录

1.结构体类型的声明

2.结构体初始化

3.结构体成员访问

4.结构体传参


1.结构体类型的声明

//创建一个结构体类型S

struct S
{
    char c;
    int i;
    double d;
};

//创建一个类型Stu,相当于int

 //struct结构体关键字
struct Stu
{  
    
    //结构体成员可以是数组,指针,标量甚至其他结构体如:
    struct S ss;//struct s 是定义的其他结构体
    
    //成员变量
    char name[20];//名字
    int age[20];//年龄
    char id[20];


}s1,s2;//s1和s2也是结构体变量
//但是s1和s2是全局变量,在main()函数中创建的s是局部变量


2.结构体初始化

注:用的上面的结构体   

    struct Stu s = { {'w',20,3.14},"张三",30,"2022",};
    //用Stu类型创建一个对象s,相当于int s,区别类型和对象
    //因为结构体中嵌套了结构体,初始化的时候也需要嵌套


3.结构体成员访问

结构体成员访问需要学习操作符“.”和“->”如果不了解请先前往学习对应的操作符,C语言操作符详解

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct S
{
	char c;
	int i;
	double d;
};


//创建一个类型Stu,相当于int
struct Stu  //struct结构体关键字
{  
	
	//结构体成员可以是数组,指针,标量甚至其他结构体如:
	struct S ss;//struct s 是定义的其他结构体
	
	//成员变量
	char name[20];//名字
	int age[20];//年龄
	char id[20];


}s1,s2;//s1和s2也是结构体变量
//但是s1和s2是全局变量,在main()函数中创建的s是局部变量

int main()
{
	struct Stu s = { {'w',20,3.14},"张三",30,"2022",};
	//用Stu类型创建一个对象s,相当于int s,区别类型和对象
	//因为结构体中嵌套了结构体,初始化的时候也需要嵌套

	printf("s.ss.c=%c\n",s.ss.c);//访问也是嵌套访问

	//用指针访问
	struct Stu* p = &s;//定义该结构体类型指针
	printf("(*p).ss.c=%c\n",(*p).ss.c);
	printf("p->ss.c=%c\n", p->ss.c);
	
	return 0;
}

4.结构体传参

结构体传参实例:

写一个函数用于读出结构体对象的所以成员变量

注:写出函数后需要将结构体的信息传到函数中,函数传参又包括传值调用和传值调用,如果对函数不太了解不知道什么是函数,函数如何调用,什么是传值调用,什么是传址调用可以去查看学习一下,有实例帮助理解。C语言函数是什么?函数全方位介绍

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct S
{
	char c;
	int i;
	double d;
};


//创建一个类型Stu,相当于int
struct Stu  //struct结构体关键字
{  
	
	//结构体成员可以是数组,指针,标量甚至其他结构体如:
	struct S ss;//struct s 是定义的其他结构体
	
	//成员变量
	char name[20];//名字
	int age;//年龄
	char id[20];


}s1,s2;//s1和s2也是结构体变量
//但是s1和s2是全局变量,在main()函数中创建的s是局部变量


//写一个函数print()用于输出结构体成员
void print1(struct Stu t)
{
	printf("%c\n", t.ss.c);
	printf("%d\n", t.ss.i);
	printf("%lf\n", t.ss.d);
	printf("%s\n", t.name);
	printf("%d\n", t.age);
	printf("%s\n", t.id);

}
void print2(struct Stu *p)
{
	printf("%c\n",p->ss.c);
	printf("%d\n",p->ss.i);
	printf("%lf\n",p->ss.d);
	printf("%s\n",p->name);
	printf("%d\n",p->age);
	printf("%s\n",p->id);
}
//print1()函数是:函数传值调用
//print2()函数是:函数传址调用
//这里当然print2()的方式要比print1()更好
//好处:我们可以修改数据,并且在调用函数时不需要开辟新的内存


int main()
{
	struct Stu s = { {'w',20,3.14},"张三",30,"2022",};
	print1(s);
	print2(&s);
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值