다음 코드를 사용하면 "get"을 통해지도를 받고 지정된 위치에 값을 반환 할 수 있습니까?함수에 C 포인터를 전달하는 방법?
나는 포인터와 메모리 할당에 대해 머리를 감싸려고 C로 셀룰러 오토 마톤을 작성하려고 시도하고있다. 이전처럼 직접 맵 [x + world.w * y] 대신 데이터를 얻기 위해 "get"을 만들기로 결정할 때까지는 아무 문제가 없었습니다. 앞으로는 동일한 크기의 두 개의지도를 가지고 같은 함수를 사용하여 데이터를 가져올 계획이므로 ("& map2, x, y)"대신 " 수 (&지도, X, Y) ".
나는이이 내가 전역을 사용에 대해 조언했기 때문에, 그래서 주에있는 두 개의 맵을 유지하고 처리하는 기능에 자신의 주소를 보내드립니다.
입니다 않는다 C 언어가 없으므로 C++ 솔루션이 유효하지 않습니다.
Google에서이 문서를 검색하려고했지만 모든 문서는 매우 기술적이며 복잡합니다. 실제로이 프로 시저가 실제로 어떻게 명명되는지는 잘 모르겠습니다. ... 그럼, 누구도 이걸 도와 줄 수 있니? malloc 배열을 함수에 전달하고 그것으로부터 데이터를 검색하거나 변경하려면 어떻게해야합니까?
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;
}
'지도'와 '세계'의 관계를 분명히해야한다고 생각합니다. 내가 뭔가를 오해하고 있지 않는 한, 함수에 대한 포인터가 아주 잘 풀 수있는 문제가있는 것처럼 나에게 보이지 않는다. –
@Jerry : 나는 그것이 어떻게 문제인지 보지 못한다. World는지도 크기 (다른 변수와 함께 나중에 확장 됨)를 정의하며, Map은지도 데이터입니다. – viktorry