再看那份manual又看到一些有趣的用法,剛好最近又有在討論二維陣列指標的相關東西,就分享一下囉。
#include "toolbox.h"
// extra stuff, also in tonc_video.h
#define M3_WIDTH SCREEN_WIDTH
// typedef for a whole mode3 linea)
typedef COLOR M3LINE[M3_WIDTH];
// m3_mem is a matrix; m3_mem[y][x] is pixel (x,y)
#define m3_mem ((M3LINE*)MEM_VRAM)
光看這個可能不知道在幹嘛,我解釋一下,只解釋型別,不解釋變數意義。
M3_WIDTH和SCREEN_WIDTH都是int,這個typedef很有趣,為後來指標型別轉換做一個伏筆,typedef 其實就是看待同樣事情的兩個方式,COLOR 是int *,M3LINE[M3_WIDTH]是int 陣列,關鍵在於這個型別轉換(M3LINE*),把MEM_VRAM這個int *,轉換成M3LINE的指標,因此與m3_mem可以用二維陣列方式存取(像是m3_mem[1][2])。
這比m3_men=(int (*)[M3_WIDTH])MEM_VRAM來的容易懂,也比較有邏輯性,不過比較多行。