1

cのsizeof演算子を使用して計算を行い、渡された配列の行または列の数に関する情報なしで2次元配列のみをパラメーターとして受け取る関数内の行数を取得できますか?

void main(void){
    int A[5][6];
    int columnsC = sizeof(A[0]) / sizeof(int);
    int rowsC = ( sizeof(A)/sizeof(int) ) / columnsC;
    printf("rows: %d\ncolumns: %d\n", rowsC, columnsC);

    getch();
}

前のコードは私のために働きました、しかし私はこれを次のヘッダーの関数に適用する方法を知るために役立つリソースを見つけることができません:

void fun(int arr[][10])

私はプログラミング言語の原則に関するコースを勉強していて、時々物事を違った考え方で学び、学習リソースを探します。これは大いに役立ちますが、今回は明らかにそうではありません。

私はどんな助けにも感心します。

4

2 に答える 2

6

いいえ。関数に渡されたときに配列のサイズを見つける方法はありません。配列は、関数に渡されるとポインタに減衰します。

これ:

void fun(int arr[][10])

実際には次の糖衣構文です:

void fun(int (*arr)[10])

代わりに、サイズを3番目の引数として渡すか、サイズを配列自体の要素として渡すことができます。

于 2012-12-16T21:12:50.890 に答える
1

長さを渡すか、配列に1行余分に割り当てる場合を除いて、これが可能であるとは思いません。この余分な行には、ヌル文字を含めることができます。関数funでは、whileループを使用して、null値に達するまで配列を循環できます。

int i = 0;
while (1) {
    if(arr[i]==NULL){
        //exits when hits end    
        break;
    }
    //do stuff with arr[i]
    i++;
}
于 2012-12-16T21:12:32.393 に答える