繁体   English   中英

C-无法将1个参数从int转换为int [] [4]

[英]C - can not convert 1 argument from int to int[][4]

我的C编译器发生错误,无法执行任何操作,我在网上冲浪寻求解决方案,但未能解决问题

第一个错误: error C2664: 'int get_min_distance(int *[][4],int,int,int,int)' : cannot convert argument 1 from 'int' to 'int *[][4]'

第二个错误: IntelliSense: argument of type "int" is incompatible with parameter of type "int (*)[4]"

两个错误都在一行

码:

#include<stdio.h>
#define inf  100000
int get_min_distance(int a[4][4], int b, int c, int d, int e);



int main(){
    int ras = 0;
    scanf("%d", &ras);

    int yal = 0;
    scanf("%d", &yal);

    int mabda = 0;
    scanf("%d", &mabda);

    int magsad = 0;
    scanf("%d", &magsad);


    int gf[4][4];
    gf[0][0] = 0;
    gf[0][1] = 1;
    gf[0][2] = inf;
    gf[0][3] = 1;
    gf[0][4] = 5;
    gf[1][0] = 9;
    gf[1][1] = 0;
    gf[1][2] = 3;
    gf[1][3] = 2;
    gf[1][4] = inf;
    gf[2][0] = inf;
    gf[2][1] = inf;
    gf[2][2] = 0;
    gf[2][3] = 4;
    gf[2][4] = inf;
    gf[3][0] = inf;
    gf[3][1] = inf;
    gf[3][2] = 2;
    gf[3][3] = 0;
    gf[3][4] = 3;
    gf[4][0] = 3;
    gf[4][1] = inf;
    gf[4][2] = inf;
    gf[4][3] = inf;
    gf[4][4] = 0;



    int distance = get_min_distance(gf [4][4], ras, yal, mabda, magsad);     //Error is here on "gf [4][4]"
    printf("%d", distance);


}


int get_min_distance(int gf[4][4], int ras, int yal, int mabda, int magsad){

    int min = inf;
    int i = ras;
    int A[5];

    if (mabda == magsad){
        return 0;
    }
    if (yal >= ras - 1){
        return inf;
    }
    for (int i = 0; i < ras; i++){
        if (gf[i][magsad] != 0 && gf[i][magsad] != inf){
            A[i] = gf[i][magsad] + get_min_distance(gf, ras, yal + 1, mabda, i);
            if (min>A[i] && A[i] > 0){
                min = A[i];
            }
        }
    }
    return min;
}

调用get_min_distance函数时发生错误知道吗? 谢谢

提供数组名称作为参数

int distance = get_min_distance(gf, ras, yal, mabda, magsad);     
                               ^^^ 

同样,该数组的初始化无效

int gf[4][4];
gf[0][0] = 0;
gf[0][1] = 1;
gf[0][2] = inf;
gf[0][3] = 1;
gf[0][4] = 5;
     ^^^
gf[1][0] = 9;
gf[1][1] = 0;
gf[1][2] = 3;
gf[1][3] = 2;
gf[1][4] = inf;
     ^^^
gf[2][0] = inf;
gf[2][1] = inf;
gf[2][2] = 0;
gf[2][3] = 4;
gf[2][4] = inf;
     ^^^
gf[3][0] = inf;
gf[3][1] = inf;
gf[3][2] = 2;
gf[3][3] = 0;
gf[3][4] = 3;
     ^^^
gf[4][0] = 3;
  ^^^
gf[4][1] = inf;
  ^^^
gf[4][2] = inf;
  ^^^
gf[4][3] = inf;
  ^^^
gf[4][4] = 0;
  ^^^^^^

因为索引的有效范围是[0, 3]

gf[4][4]gf数组的整数(超出范围)

只需传递gf变量:

get_min_distance(gf, ras, yal, mabda, magsad)

注意:这是错误的,也是超出范围的,您的数组过小。 [4][4]表示最大合法索引为3 ,否则您将覆盖一些您不拥有的内存:

gf[4][0] = 3;
gf[4][1] = inf;
gf[4][2] = inf;
gf[4][3] = inf;
gf[4][4] = 0;

(您可能会在尺寸标注中指[5][5]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM