Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何修复”;形式参数1的类型不完整;在C中_C - Fatal编程技术网

“如何修复”;形式参数1的类型不完整;在C中

“如何修复”;形式参数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

这是我的密码。我得到一个错误:

形式参数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];
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)

@SouravGhosh
int 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
对维度使用了相同的变量名)