“如何修复”;形式参数1的类型不完整;在C中
这是我的密码。我得到一个错误: 形式参数1的类型不完整 在“如何修复”;形式参数1的类型不完整;在C中,c,C,这是我的密码。我得到一个错误: 形式参数1的类型不完整 在main()内调用函数minCost的行中。请帮忙 #include<stdio.h> #include<limits.h> int minCost(int cost[][], int m, int n) { if (n < 0 || m < 0) return INT_MAX; else if (m == 0 && n == 0) return cost[m][n]; el
main()
内调用函数minCost的行中。请帮忙
#include<stdio.h>
#include<limits.h>
int minCost(int cost[][], int m, int n)
{
if (n < 0 || m < 0)
return INT_MAX;
else if (m == 0 && n == 0)
return cost[m][n];
else
return cost[m][n] + min(minCost(cost, m-1, n),minCost(cost, m, n-1) );
}
int min(int y, int z)
{
if (y < z)
return y;
else
return z;
}
int main()
{
int test_case,m,n,pos_m,pos_n;
int cost[20][20];
scanf("%d",test_case);
scanf("%d%d",m,n);
scanf("%d%d",pos_m,pos_n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf("%d",cost[i][j]);
printf("%d",minCost(cost, pos_m, pos_n));
return 0;
}
#包括
#包括
整数最小成本(整数成本[],整数m,整数n)
{
if(n<0 | | m<0)
返回INT_MAX;
else如果(m==0&&n==0)
退货成本[m][n];
其他的
退货成本[m][n]+min(最小成本(成本,m-1,n),最小成本(成本,m,n-1));
}
最小整数(整数y,整数z)
{
if(y 对于(int i=0;i,具有2D数组参数的函数的建议语法为
int minCost(size_t m, size_t n, int cost[m][n]);
因此,您不必保留任何未完成的维度。(并且列表中m
和n
必须位于cost
之前。)
但这对函数不起作用,因为对于其中一个递归调用,您试图减少矩阵的列数。没有编译器魔法可以做到这一点。在传递参数时,例如在以下语句中:
int minCost(int cost[][], int m, int n)
“cost[][]”第二个索引必须包含元素数。否则,当第一个索引递增/递减时,编译器不知道要更改多少偏移量。建议:
int minCost(int cost[][20], int m, int n)
@SouravGhoshint cost[20][]
-->int cost[][20]
typo?scanf(“%d”,测试用例);
-->scanf(“%d”,和测试用例)
@BLUEPIXY-baah…当然…我猜这已经是漫长的一天了…这里是早上00:30…谢谢。发布的代码会导致编译器输出几个警告消息,以及有关函数参数的错误消息。这些警告消息不应该被忽略,而应该被更正。例如,以下语句:scanf(“%d”,test_case);
引发了一个必须修复的警告。scanf需要的是参数的地址,而不是它本身的参数(注意数组降级为地址的特殊情况),因此语句应该是:
scanf(“%d”,test_case);`(为可读性增加了水平间距)(cont)(cont)不带“地址”运算符,scanf()
将使用test\u case
的当前内容,就好像它是一个地址,输入值将被放置在该地址。该“地址”可能位于内存中的任何位置,是未定义的行为,并可能导致seg故障事件。我认为函数参数m
和n
是数组的索引,而不是数组的维度(这很糟糕,因为main
对维度使用了相同的变量名)