以二维数组作为参数的函数

时间:2016-06-23 16:53:53

标签: c arrays function parameters

我读到要声明一个带有二维数组作为参数的函数,我需要指定数组的列数,但如果我不知道矩阵的大小我需要使用双指针。但是,我不能很好地理解这个过程,有人可以给我一些这类功能的简短例子吗?

谢谢

另外,我试着写一个程序,但它给了我一些警告。

#include<stdio.h>

int diagonal(int**,int );--->first note

int main(){
    int N;
    scanf("%d",&N);
    int array[N][N];
    int i;
    int j;
    printf("Insert the numbers:\n");
    for(i=0;i<N;i++){
            for(j=0;j<N;j++){
            scanf("%d",&array[i][i]);
          }
    }
    diagonal(&array[N][N],N); ---->second warning
}

int diagonal(int**A,int N){
    int i;
    int condition=0;
    for(i=0;i<N-1;i++){
       if(A[0][0]!=A[i+1][i+1]){
          return -1;
       }else{
          condition=1;
       }
   }
   if(condition==1){
      int val=A[i][i];
      int sum= N*val;
      return sum;
   }
}

编译器输出:

3|note: expected 'int **' but argument is of type 'int *'|

17|warning: passing argument 1 of 'diagonal' from incompatible pointer type|


||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

如果对角线上的元素具有相同的值,程序应扫描矩阵并返回主对角线上的元素总和 如果没有,则返回-1。

3 个答案:

答案 0 :(得分:2)

如果要使用可变大小数组作为参数,则需要先指定大小,然后将该参数用作数组参数中的数组大小:

int diagonal(int N, int A[N][N] );

int main() {
    ...
    diagonal(N, array);
}

int diagonal(int N, int A[N][N]){
    ...
}

答案 1 :(得分:1)

  

17 |警告:从不兼容的指针类型|

传递'diagonal'的参数1
diagonal(&array[N][N],N); //---->warning

此处&array[N][N]的类型为int*,但您的函数定义为:

int diagonal(int **,int);

第一个参数类型为int**,因此您发送错误类型作为参数。这就是你得到这个警告的原因。

答案 2 :(得分:1)

您传递的数组错误。您应该通过receive()而不是array。当你&array[N][N]执行[N] [N]数组元素的地址并传递它时,它是无效的地址。

&array[N][N]

另外,当你执行scanf时,你可能想要获得diagonal(array, N); 元素,但是你会[i][j]两次。

[i][i]