我读到要声明一个带有二维数组作为参数的函数,我需要指定数组的列数,但如果我不知道矩阵的大小我需要使用双指针。但是,我不能很好地理解这个过程,有人可以给我一些这类功能的简短例子吗?
谢谢
另外,我试着写一个程序,但它给了我一些警告。
#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。
答案 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]