C-初始结构体

目录

结构体

结构体的声明

结构的基础知识

结构的声明

结构成员类型

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

定义变量

变量初始化

结构体成员的访问

结构体传参

总结

资料


结构体

结构体的声明

结构的基础知识

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

结构的声明

struct name //name结构体标签 struct结构体关键字 struct name-结构体类型
{
	member;//成员变量
};   //此处的“;”不能少
#include <stdio.h>
struct game //创建结构体类型
{	//成员变量
	char name[20];
	int age_restrictions;
	char type[20];
}a1, a2, a3; //a1,a2,a3为全局变量,为game结构变量
int main()
{
	struct game s1 = { "Steins;Gate",15,"Galgame" }; //结构变量的创建,变量为s1
	return 0;
}
#include <stdio.h>
typedef struct game //typedef可重新将类型起个名字
{
	char name[20];
	int age_restrictions;
	char type[20];
}Gal; //重新起的名字
int main()
{
	struct game s1 = { "Steins;Gate",15,"Galgame" };
	Gal s2 = { "Clannad",0,"Galgame" }; //用Gal也可以创建变量
	return 0;
}

结构成员类型

标量、数组、指针……甚至可以是其他结构体

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

定义变量

#include <stdio.h>
struct Limit
{
	int a;
	int b;
}L1; //声明类型同时定义变量L1
int main()
{
	struct Limit L2; //定义变量L2
	return 0;
}

变量初始化

#include <stdio.h>
struct Limit
{
	int a;
	int b;
}L1 = { 1,2 }; //初始化L1
int main()
{
	struct Limit L2 = { 3,4 }; //初始化L2,结构体成员之间用“,”隔开
	return 0;
}

结构体成员有结构体时的初始化及访问

#include <stdio.h>
struct game
{
	char name[20];
	int age_restrictions;
	char type[20];
};
struct computer
{
	struct game g1;
	int SSD;
};
int main()
{
	struct computer PC = { {"Steins;Gate",15,"Galgame"},1000 };
//结构体类型computer中有结构体类型game,则在创建结构体computer的变量时,需再用{ }来初始化
	printf("%s\n", PC.g1.name); //打印结构体中的结构体成员时就用多个“.”
	return 0;
}

结构体成员的访问

结构体变量访问成员时通过操作符“.”来访问

结构体指针访问指向变量的成员,有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针,此时可用“->”来访问,详见:C语言-操作符-结构成员

结构体传参

#include <stdio.h>
typedef struct Game
{
	char name[20];
	int age_restrictions;
	char type[20];
}Gal;
void Printf1(Gal game)
{
	printf("%s\n", game.name);
	printf("%d\n", game.age_restrictions);
	printf("%s\n", game.type);
 }
void Printf2(Gal* game)
{
	printf("%s\n", game->name);
	printf("%d\n", game->age_restrictions);
	printf("%s\n", game->type);
}
int main()
{
	Gal g1 = { "Steins;Gate",15,"Galgame" };
	Printf1(g1); //调用函数,进行了传参,g1 和 &g1 都能进行传参
	Printf2(&g1); //Printf2 空间利用率更高,且运行效率更高
	return 0;
}

函数传参时,参数需要压栈(栈是先进后出、后进先出,插入一个元素叫 压栈,删除一个元素叫 出栈),如果传递一个结构体对象时,结构体过大,参数压栈会使系统开销变大

栈区:存放局部变量、函数的形式参数,函数调用也会开辟空间

堆区:进行动态内存分配

静态区:存放全局变量、静态变量

总结

结构体传参时,要传结构体地址

资料

《函数栈帧的创建和销毁》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值