9. 结构体学习 初阶,一看就会

一、结构体类型声明

1.1 结构体基础知识

什么是结构体?

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

1.2 结构体声明

struct Stu{
	char name[20];	
	int age;
	int sex;
} s1,s2,s2 ;
// s1,s2,s3 是通过struct Stu类型创建的变量

int main()
{	//	struct Stu 一起写,不能随便省略 struct ,struct Stu 才是结构体类型
	struct Stu s4; // s4 是局部变量
}

还有另一种写法:

typedef struct Stu Stu;
Stu s1,s2;
// typedef 作用是类型重定义,将 struct Stu 的作用重命名为 Stu .
typedef struct Stu {
	char name[20];
	int age;
	int sex;
} Stu;

1.3 结构体成员的类型

结构体的成员可以是标量、数组、指针,甚至是其他结构体。

struct exam{
	int a;
	int a[10];
	int* = &b;
} ss;

1.4 结构体的定义和初始化

结构体的初始化和数组类似,用一个大括号包裹。

struct Stu 
{
	char name[20];
	int age;
} s1 = {"ddd",20};		//初始化变量 s1

struct Stu su = {"zhnagsan",18};	//初始化变量su

结构体还有个高级用法:嵌套初始化

struct point {
	int x;
	int y;
};
struct Node
{
	int data;
	struct point p;
	struct Node* next;
} n1 = {10,{5,6},NULL};

struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

二、结构体的成员访问

  • 结构体变量访问成员
    结构体成员是通过点操作符(.)访问的。它接受两个操作数

#include<stdio.h>
struct point {
	int x;
	int y;
};
struct ss {
	char name[23];
	int age;
	int sex;
	struct point s;
};
void print(struct ss rt)
{
	printf("%s\n",rt.name);
	printf("%d\n",rt.age);
	printf("%d\n",rt.sex);
	printf("%d\n",rt.s.x);
}
int main()
{
	struct ss rt = { "zhangsan",18,1,{10,20} };
	print(rt);	// 传参给函数print
	return 0;
}

  • 结构体指针访问成员
    结构体指针访问使用(->)操作符
struct Stu
{
	char name[20];
	int age;
};

void print(struct Stu* ps)
{
	printf("name = %s age = %d\n", (*ps).name, (*ps).age);
	//使用结构体指针访问指向对象的成员
	printf("name = %s age = %d\n", ps->name, ps->age);
}
int main()
{
	struct Stu s = {"zhangsan", 20};
	print(&s);//结构体地址传参
	return 0;
}

三、结构体传参

#include<stdio.h>

struct ss {
	char name[20];
	int age;
};

//	结构体传参
void print1(struct ss s){
	printf("%s\n", s.name);
}

//	结构体指针传参
void print2(struct ss* s){
	printf("%s\n", s->name);
}

int main()
{
	struct ss s = { "zhnagsan",29 };

	print1(s);	//	结构体传参
	print2(&s);//	结构体指针传参

	return 0;
}

结构体作为参数传给函数时,传本体还是地址?
答案是:传地址。

函数传参时,参数需要压栈。
传递结构体对象时,系统要在内存中开辟多个空间,造成浪费,
而传递地址时,直接通过地址找到结构体对象,性能提升,效率高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值