使用结构体作为函数的输入参数的话,在更新函数的时候,就没有必要把函数的声明以及所有调用函数的地方全部更新一遍,相对还比较方便,对于输入参数比较多的函数可以使用结构体作为输入参数。常用的有三种方式,分别是:用结构体变量作函数参数,用指向结构体变量的指针作函数参数,用结构体变量的引用变量作函数参数。
用结构体变量作函数参数:
#include<stdio.h>
#include<string.h>
struct test
{
int a;
float b[3];
}
void main()
{
void print_test(struct test s);
struct test ex;
ex.a=100;
ex.b[0]=100.1;
ex.b[1]=100.2;
ex.b[2]=100.3;
print_test(ex);
}
void print_test(struct test s)
{
printf("%d\n%f\n%f\n%f\n", s.a,s.b[0],s.b[1],s.b[2]);
printf("\n");
}
用结构体变量作实参时,采取的也是“值传递”方式,结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数,这往往造成使用上的不便,因此一般少用这种方法。
用指向结构体变量的指针作函数参数:
#include<stdio.h>
#include<string.h>
struct test
{
int a;
float b[3];
}
void main()
{
void print_test(struct test *qw);
struct test ex;
struct test *ex1;
ex1=&ex;
ex.a=100;
ex.b[0]=100.1;
ex.b[1]=100.2;
ex.b[2]=100.3;
print_test(ex1);
}
void print_test(struct test *qw)
{
printf("%d\n%f\n%f\n%f\n", qw->a,qw->b[0],qw->b[1],qw->b[2]);
printf("\n");
}
这种传递方式是双向的。结构体指针变量作为函数的参数,修改后的结构体成员的值能返回到主调函数,并且,在调用函数期间,仅仅建立了一个指针变量,大大的减小了系统的开销,提高了运行效率。
用结构体变量的引用变量作函数参数(用于C++中):
#include<stdio.h>
#include<string.h>
struct test
{
int a;
float b[3];
}
void main()
{
void print_test(struct test &s);//函数声明,形参为test类型变量的引用
struct test ex;
ex.a=100;
ex.b[0]=100.1;
ex.b[1]=100.2;
ex.b[2]=100.3;
print_test(ex);
}
void print_test(struct test &s)
{
printf("%d\n%f\n%f\n%f\n", s.a,s.b[0],s.b[1],s.b[2]);
printf("\n");
}
这种传递方式:实参是结构体变量,形参是对应的结构体变量的引用,传递的是地址,因而执行效率高。
第一个程序用结构体变量作实参和形参,程序直观易懂,效率是不高的。 第二个程序采用指针变量作为实参和形参,空间和时间的开销都很小,效率较高。但不如第一个程序那样直接。 第三个的实参是结构体test类型变量,而形参用test类型的引用,虚实结合时传递的是ex的地址,因而效率较高。它兼有上两个的优点。引用变量主要用作函数参数,它可以提高效率,而且保持程序良好的可读性(引用'&'是C++的特性)。