结构体初始化函数:
#include<stdio.h>
struct S{
int a;
char c;
double d;
};
void Init(struct S* tmp){
tmp->a=100;
tmp->c='q';
tmp->d=3.14;
}
int main(){
struct S s={0};
Init(&s);//这里一定要用址传递,不能用值传递。
// 值传递只是临时拷贝,函数执行完成后,就会销毁。
return 0;
}
结构体打印函数(值传递):
#include<stdio.h>
struct S{
int a;
char c;
double d;
};
void Init(struct S* tmp){
tmp->a=100;
tmp->c='q';
tmp->d=3.14;
}
void Print(struct S tmp){
printf("%d %c %lf",tmp.a,tmp.c,tmp.d);
}
int main(){
struct S s={0};
Init(&s);
//打印函数
Print(s);//这里最好用值传递,只是做个临时拷贝,不会影响原来的结构体。
return 0;
}
效果图:
结构体打印函数(址传递):
#include<stdio.h>
struct S{
int a;
char c;
double d;
};
void Init(struct S* tmp){
tmp->a=100;
tmp->c='q';
tmp->d=3.14;
}
void Print(struct S* tmp){
printf("%d %c %lf",tmp->a,tmp->c,tmp->d);
}
int main(){
struct S s={0};
Init(&s);
//打印函数
Print(&s);//这里最好用值传递,只是做个临时拷贝,不会影响原来的结构体。
return 0;
}
结论:如果需要改动结构体内的内容,要是使用址传递,这样函数内部的改动才能影响到外面的结构体内容。如果只是打印,或是不需要改动结构体内的内容,只需要使用值传递,函数做个临时拷贝,函数结束临时拷贝直接销毁,不会影响到外部的结构体。
最优的方法:
#include<stdio.h>
struct S{
int a;
char c;
double d;
};
void Init(struct S* tmp){
tmp->a=100;
tmp->c='q';
tmp->d=3.14;
}
void Print(const struct S* tmp){//这里添加const,这样外面的结构体就不会改变了。
printf("%d %c %lf",tmp->a,tmp->c,tmp->d);
}
int main(){
struct S s={0};
Init(&s);
//打印函数
Print(&s);
return 0;
}