C言語で2 D配列を動的に割り当てるにはどうすればいいですか?コードの例
3919 ワード
以下に、スタック上に2 D配列(または2 D配列を動的に割り当てる)を作成する異なる方法を示します.
以下の例では,”[R’を行数とし,”C’を列数として,r=3,c=4および以下の値で2 D配列を作成した.
1)単一のポインタを使用する:
1つの簡単な方法は、簡単なポインタアルゴリズムを使用して、r*cサイズのメモリブロックとアクセス要素を割り当てることである.
出力は次のとおりです.
2)ポインタ配列の使用
rサイズのポインタ配列を作成できます.C 99からC言語では可変サイズの配列を使用できます.ポインタ配列を作成すると、各行にメモリを動的に割り当てることができます.
出力は次のとおりです.
3)ポインタを指すポインタの使用
また、2つのポインタを使用してポインタ配列を動的に作成することもできます.配列ポインタを動的に割り当てると、メソッド2のように各行にメモリを動的に割り当てることができます.
出力は次のとおりです.
4)二重ポインタとmalloc呼び出しを使用
出力は次のとおりです.
不正な点が見つかったり、上記のトピックに関する詳細を共有したい場合は、コメントを発表してください.
その他のC言語に関する内容は、lsbin-IT開発技術:https://www.lsbin.com/
以下のC言語の詳細を表示します. C言語exec関数ファミリー : https://www.lsbin.com/3438.html C言語externキーワード通俗解釈 : https://www.lsbin.com/2950.html C言語のscansetは何ですか? : https://www.lsbin.com/2363.html
以下の例では,”[R’を行数とし,”C’を列数として,r=3,c=4および以下の値で2 D配列を作成した.
1 2 3 4
5 6 7 8
9 10 11 12
1)単一のポインタを使用する:
1つの簡単な方法は、簡単なポインタアルゴリズムを使用して、r*cサイズのメモリブロックとアクセス要素を割り当てることである.
#include
#include
int main()
{
int r = 3, c = 4;
int *arr = ( int *) malloc (r * c * sizeof ( int ));
int i, j, count = 0;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
*(arr + i*c + j) = ++count;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf ( "%d " , *(arr + i*c + j));
/* Code for further processing and free the
dynamically allocated memory */
return 0;
}
出力は次のとおりです.
1 2 3 4 5 6 7 8 9 10 11 12
2)ポインタ配列の使用
rサイズのポインタ配列を作成できます.C 99からC言語では可変サイズの配列を使用できます.ポインタ配列を作成すると、各行にメモリを動的に割り当てることができます.
#include
#include
int main()
{
int r = 3, c = 4, i, j, count;
int *arr[r];
for (i=0; i
出力は次のとおりです.
1 2 3 4 5 6 7 8 9 10 11 12
3)ポインタを指すポインタの使用
また、2つのポインタを使用してポインタ配列を動的に作成することもできます.配列ポインタを動的に割り当てると、メソッド2のように各行にメモリを動的に割り当てることができます.
#include
#include
int main()
{
int r = 3, c = 4, i, j, count;
int **arr = ( int **) malloc (r * sizeof ( int *));
for (i=0; i
出力は次のとおりです.
1 2 3 4 5 6 7 8 9 10 11 12
4)二重ポインタとmalloc呼び出しを使用
#include
#include
int main()
{
int r=3, c=4, len=0;
int *ptr, **arr;
int count = 0, i, j;
len = sizeof ( int *) * r + sizeof ( int ) * c * r;
arr = ( int **) malloc (len);
// ptr is now pointing to the first element in of 2D array
ptr = ( int *)(arr + r);
// for loop to point rows pointer to appropriate location in 2D array
for (i = 0; i < r; i++)
arr[i] = (ptr + c * i);
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
arr[i][j] = ++count; // OR *(*(arr+i)+j) = ++count
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf ( "%d " , arr[i][j]);
return 0;
}
出力は次のとおりです.
1 2 3 4 5 6 7 8 9 10 11 12
不正な点が見つかったり、上記のトピックに関する詳細を共有したい場合は、コメントを発表してください.
その他のC言語に関する内容は、lsbin-IT開発技術:https://www.lsbin.com/
以下のC言語の詳細を表示します.