前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用结构体作为函数输入参数

使用结构体作为函数输入参数

作者头像
用户9736681
发布2022-05-11 08:16:10
2.9K0
发布2022-05-11 08:16:10
举报
文章被收录于专栏:嵌入式随笔

使用结构体作为函数的输入参数的话,在更新函数的时候,就没有必要把函数的声明以及所有调用函数的地方全部更新一遍,相对还比较方便,对于输入参数比较多的函数可以使用结构体作为输入参数。常用的有三种方式,分别是:用结构体变量作函数参数,用指向结构体变量的指针作函数参数,用结构体变量的引用变量作函数参数。

用结构体变量作函数参数:

#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++的特性)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档