c言語、配列の行数と列数を手動で入力し、2 D配列を動的に作成する
少しずつ、基礎から・・・
ポインタに配列をつけるのは、本当に頭が痛いですが、実はすべて道ですね.
ここでは、2 D配列の動的作成について説明します.
1、二次元ポインタを定義する.
2、それから1次元のアドレス空間を申請して、更に各1次元のポインタのために1行のデータ空間を申請して、そして2次元のポインタに値を割り当てます;
3、データを入力する;
4、メモリを解放します(1次元ポインタの上のものを解放してから、2次元ポインタの上のものを解放します).
直接コード:
ポインタに配列をつけるのは、本当に頭が痛いですが、実はすべて道ですね.
ここでは、2 D配列の動的作成について説明します.
1、二次元ポインタを定義する.
2、それから1次元のアドレス空間を申請して、更に各1次元のポインタのために1行のデータ空間を申請して、そして2次元のポインタに値を割り当てます;
3、データを入力する;
4、メモリを解放します(1次元ポインタの上のものを解放してから、2次元ポインタの上のものを解放します).
直接コード:
#include
#include
int main()
{
int **p; //
int m, n;//
int i, j;
printf("please input the arry of rows and columns:");
scanf_s("%d%d", &m, &n);
if (m <= 0 || n <= 0)
return -1;
//
p = (int **)malloc(sizeof(int *) *m);
for (i = 0; i < m; i++)
p[i] = (int *)malloc(sizeof(int) * n);
//
printf("please input data into this arr:");
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf_s("%d", &p[i][j]);
printf("The arry has %d rows and %d columns:
", m, n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
printf("%d ", p[i][j]);
printf("
");
//
for (i = 0; i < m; i++)
free(p[i]);
free(p);
return 0;
}