動態二維數組

#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");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章