结构体相关知识总结

结构体传参
1.结构体的简单认识

struct S
{
	int a;
	char c;
	double d;
};
int main()
{
	struct S s;
	s.a = 100;
	s.c = 'w';
	s.d = 3.14;
	printf("%d %c %f", s.a,s.c,s.d);
	return 0;
}

这是一个最简单的结构体传参,先定义结构体 struct S 然后在主函数中赋值,打印。

2结构体进行传参(传值和传址的区别)(以下有几种不同的情况)
一.

struct S
{
	int a;
	char c;
	double d;
};
void Init(struct S tmp)
{
	tmp.a = 100;
	tmp.c = 'w';
	tmp.d = 3.14;
	printf("%d %c %f\n", tmp.a, tmp.c, tmp.d);//可以输出
	                                          //表明这个传参传递的是类型而不是数值
}
int main()
{
	struct S s = { 0 };
	Init(s);
	printf("%d %c %f", s.a,s.c,s.d);//0   0.00000//第二个%c   //传过去不改变s
	return 0;
}

输出结果为:100 w 3.140000
0 0.000000

tmp和s 的地址不一样
表明:Init(s);传递的结构体不能被改变,如果想改变,则需要传址
总结:则传值不可以改变结构体内变量

二.

struct S
{
	int a;
	char c;
	double d;
};
void Init(struct S* ps)
{
	ps->a = 100;
	ps->c = 'w';
	ps->d = 3.14;
	printf("%d %c %f", ps->a, ps->c, ps->d);
}
int main()
{
	struct S s = { 0 };
	Init(&s);
	printf("%d %c %f", s.a,s.c,s.d);
	return 0;
}

输出结果为:100 w 3.140000
100 w 3.140000
总结:则传址可以改变结构体内变量

3.打印结构体
一.传值

struct S
{
	int a;
	char c;
	double d;
};
void Init(struct S* ps)
{
	ps->a = 100;
	ps->c = 'w';
	ps->d = 3.14;
}
void Print1(struct S tmp)
{
	printf("%d %c %f\n", tmp.a, tmp.c, tmp.d);
}
int main()
{
	struct S s = { 0 };
	Init(&s);
	//打印结构体
	Print1(s);//打印结构体时,可以直接传s(传值)
	return 0;
}

输出结果为:100 w 3.140000
二.传址

struct S
{
	int a;
	char c;
	double d;
};
void Init(struct S* ps)
{
	ps->a = 100;
	ps->c = 'w';
	ps->d = 3.14;
}
void Print2(struct S* ps)//等同于void Print2(const struct S* ps)//防止ps被改变
{
	printf("%d %c %f", ps->a, ps->c, ps->d);
}
int main()
{
	struct S s = { 0 };
	Init(&s);
	//打印结构体
	Print2(&s);//打印结构体时,可以直接传s
	           //打印结构体时,传址和s都行。
	return 0;
}

注:个人结合老师上课内容对结构体的认识,本人萌新可能有许多不到之处,望周正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值