#include<stdio.h>
#include<stdlib.h>
//手動輸入x,y,創建一個動態數組,p[x][y]
//從0開始初始化,一直初始化到p[x-1][y-1]這個元素,一直遞增
void main1()
{
int x,y;
scanf_s("%d%d", &x, &y); //初始化x 8 * 9的二維數組
void *p = malloc(sizeof(int)*x*y); //分配內存,連續的內存
//y必須是一個已知的常量,才能將這片內存當做一個二維數組的內存使用
int(*px)[9] = p; //二維數組(每個元素爲有9個元素的一維數組的一維數組)
int number = 0;
for (int i = 0; i < x; i++)
{
for (int j = 0; j < 9; j++)
{
px[i][j] = ++number;
printf("%3d", px[i][j]);
}
putchar('\n');
}
system("pause");
}
void main()
{
int x, y;
scanf_s("%d%d", &x, &y);
int **pp = (int **)malloc(sizeof(int *)*x);
//二級指針可以存儲指針數組的地址
//動態分配一片內存,存放指針數組,每一個元素都是一個地址,
//然後將指針數組的首地址傳遞給pp保存
for (int i = 0; i < x; i++)
{
pp[i] = malloc(sizeof(int)*y); //分配內存,有多少列,每個指針都存儲這樣一片內存的地址,這樣連續的一片內存就是一個一維數組
}
int num = 0;
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
//pp[i][j] = num++;
*(*(pp + i) + j) = num++;
printf("%3d", pp[i][j]);
}
putchar('\n');
}
//釋放內存
for (int i = 0; i < x; i++)
{
free(pp[i]);
}
free(pp);
system("pause");
}
動態二維數組
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.