结构体传参
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;
}
注:个人结合老师上课内容对结构体的认识,本人萌新可能有许多不到之处,望周正。