0

2D配列にアクセスする際に問題があります。私はint** s(sは2次元です)をパラメータとして渡します。私は*(*(s+sp)+jc))を試しましたが、これはエラーです(エラーコードはありませんが、プログラムをシャットダウンするだけです)。何が問題なのですか?または2Dを使用できない場合はどのように私はparentesesとマトリックス鎖乗算の行列の列を印刷することができますよりも、パラメータとして配列、 - >このような:。((a(bc))((de)f))行列チェーンの乗算で、2D配列(パラメータ)エラーへのアクセスエラー

void printParenthesis(int sp, int ep, int jc, int** s) { 
    printf("Debug\n"); 

    if(sp==ep) { 
     printf("(%d ", sp); 
     return; 
    } 
    else { 
     printParenthesis(sp, jc, s[sp][jc], s); 
     printParenthesis(jc+1, ep, s[jc+1][ep], s); 
     printf(") "); 
    } 
} 
int main() { 
    ... 
    int s[matNum-1][matNum] 
    ... 
    printParenthesis(0, matNum, jc, (int**)s); 
+0

'int **'は 'int [] []'ではありません –

答えて

0

Cは、2D-配列で実際にあなたがそれを期待する方法は扱いません。それそれC-ウェイん。

は、まずは*(*(s+sp)+jc))を観察してみましょう。(s+sq)はタイプint*であり、ないint**。つまり、クラッシュの原因をすぐに知ることができます。式はint*を2回デリファレンスしますが、これは正しく動作するようには現実的ではありません。

あなたのコードを修正するには、あなたは

void printParenthesis(int sp, int ep, int jc, int (*s)[SIZE_S]) 

あなたの2Dアレイは、サイズの長さを固定しているように、アレイのパラメータの定義を変更する必要があります。

つまり、SIZE_Sポインターの配列をintに渡しています。

+0

ありがとうございます。しかし、2D配列のサイズが可変である場合には他にもアプローチはありますか?そうでない場合は、その関数をメイン関数の反復型に変換する方が良いでしょうか? – saemin2700