成功解决“函数用于调用的参数太少/太多”问题

简介: 成功解决“函数用于调用的参数太少/太多”问题

问题描述

我们在使用C语言编写程序,特别是使用函数递归时经常会遇到编译器报错“用于调用的参数太少/太多”,如图:

那么遇到这种情况我们该如何解决呢?


原因分析

首先以下面一段代码为例向大家解释问题到底出在哪里

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int power(int x,int y) 
{
  if (y>1) 
  {
    return x * power(y-1);
  }
  else 
  {
    return x;
  }
}
 
int main()
{
  int n = 0;
  int k = 0;
  scanf("%d %d", &n,&k);
  printf("%d",power(n, k));
 
  return 0;
}

如图,这是一段使用函数递归的方式求解n的k次方的程序代码。看似没有什么问题,但如果你原封不动的将该段代码放在编译器运行时却会导致编译器报错,如图:

然而问题就出在第 7行代码:

return x * power(y-1);

注意,power函数定义时创建了两个形式参数的,即x和y:

int power(int x,int y) 

那么在后续调用power函数时需要传给它两个参数才行,而第七行代码明显只传给了power函数一个参数,因此会导致编译器报错“用于调用的参数太少”


解决方法

在搞清楚了编译器为何会报错之后,我们的解决方法也非常简单,即,将原代码改为:

return x * power(x,y-1);

这样就确保了在调用函数时传给power函数两个参数供其使用,就可以防止编译器报错

当然,如果你在定义函数时创建了三个甚或是更多的形式参数,那么就请务必在后续调用该函数时传给它数量相同的参数供函数使用,这样就能保证编译器不会报错啦。





相关文章
|
7月前
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
53 0
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
|
6月前
|
运维 Serverless 数据处理
函数计算产品使用问题之遇到生成没有反应、中止也不行,以及刷新后队列积累的问题,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1月前
|
传感器 存储 索引
如何解决 analogRead()函数读取到的模拟值不准确的问题
在使用analogRead()函数时,若读取到的模拟值不准确,可以通过校准ADC、增加采样次数取平均值、使用外部参考电压或检查电路连接等方式来提高读取精度。
|
7月前
|
Java 开发工具
JVM参数太多?一网打尽常用JVM参数!
JVM参数太多?一网打尽常用JVM参数!
|
7月前
|
消息中间件 前端开发 关系型数据库
🤔️测试问我:为啥阅读量计数这么简单的功能你都能写出bug?
🤔️测试问我:为啥阅读量计数这么简单的功能你都能写出bug?
|
设计模式 消息中间件 JavaScript
干掉 “重复代码”,这三种方式绝了!
干掉 “重复代码”,这三种方式绝了!
36971 2
干掉 “重复代码”,这三种方式绝了!
|
算法 C语言
04【C语言 & 趣味算法】“抓交通肇事犯”问题。算法改进:设置“标识变量”,有效减少循环次数。
04【C语言 & 趣味算法】“抓交通肇事犯”问题。算法改进:设置“标识变量”,有效减少循环次数。
04【C语言 & 趣味算法】“抓交通肇事犯”问题。算法改进:设置“标识变量”,有效减少循环次数。
又被逼着优化代码,这次我干掉了出入参 Log日志
又被逼着优化代码,这次我干掉了出入参 Log日志
166 0
又被逼着优化代码,这次我干掉了出入参 Log日志
|
小程序
小程序 onLaunch 参数差别
小程序 onLaunch 参数差别
548 0
小程序 onLaunch 参数差别