Written by coh at home
보물지도 찾기. 본문
static library와 header file을 전달 받고 baseline 과 함수를 구현해서
포인터로 보물지도에 담긴 값을 출력했습니다.
문제의 핵심은
1. void* 의 간접참조는 error를 발생시킨다는 것.
왜냐하면 void pointer는 간접참조해도 타입을 알 수 없기 때문.
2.마찬가지로 char* 타입의 변수를 *(char*) 하면은 char형태이기 때문에
원하는 만큼의 간접참조를 할 수 없었습니다. 따라서 이를 해결하는 것이 문제의 핵심이었습니다.
이를 해결하기 위해 주소를 담을 변수 unsigned long long arrVar;를 선언했고
(64 bit CPU는 8byte의 주소길이를 갖기 때문.)
arrVar = *arrVar 를 필요한 횟수만큼 loop를 돌았습니다.
base case인 depth = 0을 미리 해결하였습니다.
#include<stdio.h>
#include"inc/treasureMap.h"
void* FindingTreasure(void* map, int depth) {
unsigned long long* arrVar;
arrVar = map;
if (depth == 0)
return map;
for (int i = 0; i < depth; i++)
{
arrVar = *arrVar;
if (i == depth-1) {
map = arrVar;
return map;
}
}
}
void main(void)
{
void* map[MAX_SIZE] = { 0 };
int hints[MAX_SIZE] = { 0 };
int treasureSize = getMap(map, hints);
for (int i = 0; i < treasureSize; i++)
{
printf("%c", *((char*)FindingTreasure(map[i], hints[i])));
}
printf("\n");
}
이를 다 돌리면
교수님이 숨겨놓은 보물지도 글씨...를 찾을 수 있습니다.
처음에 loop 길이를 잘못 설정해서 Access violation error가 떴던 기억이..
'languages > c' 카테고리의 다른 글
c언어 data filter 만들기 (0) | 2022.03.29 |
---|---|
동적메모리 예제 (0) | 2022.03.25 |
동적메모리 (0) | 2022.03.24 |
정적 메모리 예제 (0) | 2022.03.24 |
.c file I/O studentDB.bin (0) | 2022.03.23 |