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

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

问题描述

我们在使用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函数两个参数供其使用,就可以防止编译器报错

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





相关文章
|
Linux Windows
uboot配置时ln: failed to create symbolic link ‘asm’
uboot配置时ln: failed to create symbolic link ‘asm’
382 2
|
XML JSON 前端开发
bpmn.js 使用常见问题(不定时持续更新)
bpmn.js 使用常见问题(不定时持续更新)
6636 2
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
本文讨论了在配置Vite项目时遇到的`vite.defineConfig is not defined`错误,这通常是由于缺少必要的导入语句导致的。文章还涉及了如何创建最新版本的Vite项目以及如何处理`configEnv is not defined`的问题。
781 3
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
|
人工智能 JSON 自然语言处理
Qwen 2.5:阿里巴巴集团的新一代大型语言模型
Qwen 2.5:阿里巴巴集团的新一代大型语言模型
|
测试技术 uml UED
软件需求管理:从获取到变更的全过程
【8月更文第20天】在软件开发项目中,需求管理是确保产品满足用户期望和业务目标的关键环节。本文将探讨软件需求管理的基本概念、需求获取的方法、需求分析与建模的实践、需求验证与确认的策略以及需求变更管理的最佳实践。
1111 5
|
编解码
STM32CubeMX FreeRTOS u8g2图片菜单制作
STM32CubeMX FreeRTOS u8g2图片菜单制作
689 8
|
C++ Windows
[c++][记录]libwdi编译
[c++][记录]libwdi编译
317 0
|
存储 Linux Windows
在Linux中,如何查看linux中内存使用率最高的进程?
在Linux中,如何查看linux中内存使用率最高的进程?
|
Windows
【vscode】 VsCode终端崩溃C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe已终止,退出代码:2
【vscode】 VsCode终端崩溃C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe已终止,退出代码:2
2940 1
|
前端开发 JavaScript BI
JavaScript的过滤大师:深度解析Filter用法
JavaScript的过滤大师:深度解析Filter用法
822 0

热门文章

最新文章