5

動的に割り当てることにより、2 次元配列を構築しようとしています。私の質問は、最初の次元が 100 個の値を取り、2 番目の次元が問題に応じて可変量の値を取る可能性があるということです。可能であれば、どのようにアクセスしますか?2 番目の次元の境界を知るにはどうすればよいですか?

4

4 に答える 4

5

(コード内のコメントを参照)

その結果、次のような配列が得られます。

ここに画像の説明を入力

// Create an array that will contain required variables of the required values
// which will help you to make each row of it's own lenght.
arrOfLengthOfRows[NUMBER_OF_ROWS] = {value_1, value_2, ..., value_theLast};

int **array;
array = malloc(N * sizeof(int *));   // `N` is the number of rows, as on the pic.

/*
if(array == NULL) {
    printf("There is not enough memory.\n");
    exit (EXIT_FAILURE);
}
*/

// Here we make each row of it's own, individual length.
for(i = 0; i < N; i++) {
    array[i] = malloc(arrOfLengthOfRows[i] * sizeof(int)); 

/*
if(array[i] == NULL) { 
    printf("There is not enough memory.\n");
    exit (EXIT_FAILURE);        
}
*/
}
于 2013-11-12T03:51:27.847 に答える
2

100 個のポインターの配列を使用できます。

int *arr[100];

次に、100個のポインターのそれぞれに、必要なサイズのメモリを個別に動的に割り当てることができますが、(ポインターごとに)割り当てたメモリの量を覚えておく必要があります.Cコンパイラがそれを記憶したり、伝えたりすることは期待できません.つまりsizeof、ここでは機能しません。

任意の (境界内で許可されている) 場所にアクセスするには、単純に 2D 配列表記を使用できます。たとえば、ポインタに5th割り当てられたメモリの場所にアクセスするには、またはを使用できます。20tharr[20][5]*(arr[20] + 5)

于 2013-11-12T03:51:12.567 に答える