1. 程式人生 > >一種一維陣列或連續記憶體區轉多維陣列的方法

一種一維陣列或連續記憶體區轉多維陣列的方法

在C中建立的多維陣列,其實本質上都是分配符合容量大小的一維陣列,再分割成等份單位而成。除非使用堆空間動態分配則不適用:

https://blog.csdn.net/cjzjolly/article/details/84189136

例如陣列int array[3][3],其實實際是想申請了9個單元的連續儲存空間,然後新建3個指向該型別單元的指標的指標——例如本例子就是int array**,把0,3,6這幾個單元的地址抽出來——其跳躍規律為offset = y * width,寬度為你希望的二維表每行的寬,作為剛剛的3個指標的指標的值,即可把一維記憶體空間對映為二維陣列了。

例子如下:

#include "stdio.h"
#include "stdlib.h"

int main(){
	int width = 3;
	int height = 3;
	int x, y;
	int arrayDiv1[width * height]; //1維陣列 
	int** arrayDiv2 = (int**) malloc(sizeof(int*) * height);
	//原地轉換為二維陣列 
	for(y = 0; y < height; y++){
		int offset = y * width;
		arrayDiv2[y] = &arrayDiv1[offset];
	}
	arrayDiv2[0][2] = 245;
	arrayDiv2[2][2] = 233;
	printf("%d\n", arrayDiv2[0][2]);
	printf("%d\n", arrayDiv2[2][2]);
	return 0;
}

陣列要滿足每一行都能對齊才行,否則在讀寫最後一行時容易因為缺少單元導致越界錯誤。

執行效果: