c语言怎样从函数返回多个值

在 C 语言中,直接从一个函数返回多个值并不是一种内置的支持特性。但是,可以通过几种方法间接实现这一目标。以下是几种常用的技巧:

可以将多个值通过指针传入函数,并在函数内部修改这些指针指向的值。

可以定义一个结构体来封装多个值,并从函数返回这个结构体。

如果返回的值数量固定,可以使用数组来传递多个值。

虽然不是推荐的做法,但在某些情况下,可以使用宏来实现返回多个值的效果。

  • 使用指针时需要注意指针的有效性和安全性,确保不会出现悬空指针或越界访问。
  • 使用结构体时,如果结构体较大,可能会导致栈溢出或性能问题,特别是在递归函数中。
  • 使用宏时要小心,因为它可能会导致难以调试的问题,并且可能会引入副作用。

在实际编程中,推荐使用结构体或指针的方法来返回多个值。这样既清晰又安全。

【办公小招】Excel篇(二)查找并返回值

【实例】:绩效补贴查询、筛选汇总

朋友有个表,是全部员工全年绩效和补贴明细。年底了,要满足各部门和员工的查询需求,由于各自查询的项目、人数都不一样,每次都要逐个查找、筛选项目、合并汇总,非常麻烦,因此想要简化一下下。

【绩效补贴表】之一(图一):

图一

其实,很简单,VLOOKUP函数就可以满足她的查询汇总要求。

我们先看函数说明(图二):

图二

搜索【表区域】【首列】满足条件的元素,确定【待检索单元格】在区域中的行序号,再进一步返回【选定单元格】的值。默认情况下,表是以升序排序的。

VLOOKUP(【待检索单元格】,【表区域】,【返回值的列序号】,【匹配要求】)

4个参数,看起来有点复杂,其实一点都不难。

【待检索单元格】:就是要查询匹配的值。(在实例中,就是【姓名】,或者【员工编号】)

【表区域】:检索范围,就是在哪里找。(注意:用来与【待检索单元格】匹配查找的列必须是【表区域】的【首列】。同时,还应把需要返回值的列包含在【表区域】内。)

【返回值的列序号】:【需要返回的值】所在的列,在选取的【表区域】范围内从左到右是第几列。(数字。)

【匹配要求】:TRUE,近似匹配。FALSE,精确匹配。(近似即模糊,包含就行。精确即相等,须完全一致。)

看起来还是有点复杂,直接操作吧。

回到实例,我们做一个输入员工姓名,显示相应所有绩效项目的查询

操作一:

假装高大上一点,我们将原始数据放在Sheet2,查询页面放在Sheet1(图三)。

图三

操作二:

我们先来查找【一季度绩效】。

在Sheet1【B2单元格】,输入函数VLOOKUP(【待检索单元格】,【表区域】,【返回值的列序号】,【匹配要求】)

其中:

【待检索单元格】=A2(员工姓名)

【表区域】=Sheet2!B:Q(Sheet2表的B列至Q列。注意:因为我们现在是按Sheet1【姓名】进行查找,所以Sheet2【表区域】的【首列】必须是与之匹配查找的【姓名】列B列。假如,=Sheet2!A:Q是错误的,这样Sheet1【姓名】列与Sheet2【员工编号】A列进行匹配查找。=Sheet2!C:Q也是错误的,这样Sheet1【姓名】列与Sheet2【一季度绩效】C列进行匹配查找。)

【返回值的列序号】=2(我们在上面参数【表区域】=Sheet2!B:Q从左往右数,【姓名】B列序号为1,那么【一季度绩效】C列序号为2。)

【匹配要求】=FALSE(精确匹配。)

即在【B2单元格】输入:=VLOOKUP(A2,Sheet2!B:Q,2,FALSE)

可以看到结果出来了#N/A(表示没找到)

我们在【A2单元格】输入“贾乐”试试,可以看到结果出来了1023(图四)。

我们可以回到Sheet2找到“贾乐”行24,验证他【一季度绩效】1023,结果正确。

图四

操作三:

其他项目可以同样操作。

B2=VLOOKUP(A2,Sheet2!B:Q,2,FALSE)

C2=VLOOKUP(A2,Sheet2!B:Q,4,FALSE)

D2=VLOOKUP(A2,Sheet2!B:Q,8,FALSE)

E2=VLOOKUP(A2,Sheet2!B:Q,13,FALSE)

F2=VLOOKUP(A2,Sheet2!B:Q,15,FALSE)

同理,可以直接往下拖动单元格,实现多个姓名查询显示,形成汇总表(图五)。

图五

【总结】:

VLOOKUP(【待检索单元格】,【表区域】,【返回值的列序号】,【匹配要求】)

4个参数:找谁,在哪里找,找到的话返回第几列的值,精确还是模糊查找?

需要【注意】的是,【表区域】的匹配项必须是【首列】。【待检索单元格】只在【表区域】的首列中查找匹配。

另:如果存在多个匹配值,函数只返回【第一个匹配值】的返回值。

30秒掌握C语言函数返回多个值的方法

在C语言中,如何实现一个函数可以同时返回多个值,而不是只能返回一个值。这种方法的应用场景很多,例如交换两个变量的值、计算一个数组的最大最小值、求解一个方程的根等。

在C语言中,有两种实现函数返回多个值的方法:使用指针参数和使用结构体类型。下面分别介绍这两种方法的原理和优缺点。

  • 使用指针参数:使用指针参数的方法是将需要返回的多个值作为函数的指针类型的参数传递,然后在函数内部通过修改指针所指向的变量的值来实现返回多个值。例如,下面的代码片段:

表示定义了一个swap函数,用来交换两个整型变量的值,并在主函数中调用它。swap函数接受两个指针类型的参数a和b,分别指向需要交换的两个变量x和y。在swap函数内部,通过修改a和b所指向的变量的值来实现交换。这样,swap函数就相当于返回了两个值,即交换后的x和y的值。

使用指针参数的方法的优点是实现简单,不需要额外定义新的数据类型,也不需要额外分配或释放内存空间。缺点是需要注意指针的合法性和安全性,避免出现空指针、野指针、悬空指针等问题。

  • 使用结构体类型:使用结构体类型的方法是定义一个包含需要返回的多个值作为成员变量的结构体类型,然后在函数内部创建一个该类型的变量,并将需要返回的多个值赋值给该变量的成员变量,最后将该变量作为函数的返回值返回。例如,下面的代码片段:

表示定义了一个Complex结构体类型,用来表示一个复数,并定义了一个add函数,用来计算两个复数的和,并在主函数中调用它。add函数接受两个Complex类型的参数a和b,分别表示需要相加的两个复数x和y。在add函数内部,创建一个Complex类型的变量c,并将a和b的实部和虚部分别相加后赋值给c的实部和虚部。最后,将c作为函数的返回值返回。这样,add函数就相当于返回了两个值,即两个复数的和的实部和虚部。

使用结构体类型的方法的优点是可以自定义新的数据类型,更加灵活和可读,也可以避免指针的问题。缺点是需要额外定义新的数据类型,也需要额外分配或释放内存空间,可能造成内存浪费或溢出。

以上就是C语言函数返回多个值的方法的简要介绍,希望对你有所帮助。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。