二次元配列をパラメータとする関数を宣言するには、配列の列数を指定する必要がありますが、行列のサイズがわからない場合はダブルポインタを使用します。しかし、私はこのプロセスを非常にうまく理解することはできません。誰かがこのタイプの関数の簡単で簡単な例を教えてくれますか?二次元配列をパラメータとして持つ関数
はまた、私はプログラムを書くことを試みた
ありがとう、それは私にいくつかの警告を与えます。
#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でない場合がある場合、主対角線上の要素の和を返すべきです。
私は申し訳ありませんが、質問がダムと聞こえるかもしれないが、私は初心者です。宣言では、 "N"パラメータを削除しませんか?私は私が置くかどうかを意味する int対角(int N、int A [N] [N]); "N"は宣言されておらず、 "N"を削除するとプログラムは実行されません。 –
@GiorgioMほとんどの場合、宣言内のパラメータ名は必須ではありませんが、この場合、可変サイズの配列を処理すること、およびサイズを指定することをコンパイラに知らせる必要があります。配列パラメータを 'int [] []'として宣言しようとすると、不完全な宣言になります。 – dbush
ああ、今は気にしない。 ありがとうございました と回答したすべての人にありがとう –