具有下面的代碼,我怎麼能有「得」收到一張地圖,並在指定的位置返回值?C傳遞函數指針,如何?
我試圖用C編寫元胞自動機,試圖環繞指針和內存分配我的頭。一切都很好,直到我決定做「得」來獲取數據,而不是直接映射[X + world.w * Y]爲我所用。 我需要這個,因爲在未來,我計劃有兩個相同尺寸的地圖,並使用相同的功能,從他們那裏得到的數據(所以它會是「得(& MAP2,X,Y)」,而不是「得到(&圖,X,Y)」。
我這樣做是因爲我是反對使用全局變量建議,所以我會繼續在主要的兩個地圖和發送它們的地址給函數來處理。
這是C語言,所以沒有C++的解決方案是有效的。
我試着在谷歌搜索這一點,但所有的文檔都非常的技術和令人費解的,我不知道這個過程實際上是如何命名...那麼,有誰能幫助我呢?我如何將一個malloc'ed數組傳遞給一個函數並從中檢索或更改數據?
typedef struct Map {
int HP;
int type;
unsigned int flags;
} Map;
typedef struct World {
int w;
int h;
} World;
struct World world;
int tile (int x, int y) { return x + world.w * y; }
int get (/*unknown*/map , int x, int y){
int val = x + world.w * y;
return /*unknown ->?*/ type;
}
int main(){
Map* map;
world.w = 8;
world.h = 8;
int tiles = world.w * world.h;
map = (Map*)malloc(sizeof(Map) * tiles);
int i;
for(i = 0; i < tiles; i++){
map[i].type = rand()%2;
}
int x,y;
while(1){
put(0,0);
for(y = 0; y < world.h; y++){
printf("\n");
for(x = 0; x < world.w; x++){
printf("%i ", get(&map, x, y));
}
}
};
printf("\n");
return 0;
}
我認爲你需要闡明'Map's和'Worlds'之間的關係。除非我誤解了某些東西,否則它不會*看起來像你有一個問題,指向函數的指針將很好地解決...... –
@Jerry:我不明白這是一個問題。世界定義了地圖大小(稍後將用其他變量進行擴展),Map是地圖數據。 – viktorry