void* 형도 배열구현이 가능한가요?;
여름
C공부하다가 문득 궁금해진건데;
void* 형도 일단은 주소를 저장하는 것이지 않습니까;
그래서 말인데
void* 형태도 배열로 쓰는게 가능할까요?
void* a;
void* b;
void* c;
이렇게 되있는것을 합쳐서;; a[0], a[1], a[2] 이런식으로 쓸 수 있게요.
가능한가요?;;
동적 할당이 가능할런지;;
-
목소리
ㅇ ㅏ~~ 글엄 void타입을 당연히 쓰셔야죵~~
-
치킨마루
단풍나무// 일부러 저렇게 해서 모든 타입을 담을 수 있는 배열이 필요했거든요 ㅎㅎ
-
초고리
아하 제가 질문을 잘못 이해했군요
-
어리버리
메모리에 변수값만 저장할뿐 타입이 저장되지 않는 문제가....
-
동생몬
가능하군요! 감사합니다 ㅎㅎ
-
별햇님
type a, b, c; // void * a, *b, *c;
type arr[3] = {a, b, c}; // void *[3] = {a, b, c};
void **d_arr = (void **)malloc((void *)*3); -
한샘가온
포인터 배열을 사용하는 것이라면 문제가 없습니다.
다만 void형 배열을 사용하려고 하는 것이 문제죠. -
난길
void*가 주소를 가지는거라 4byte를 할당받는다고 배운거 같은데 이건 날로 배운걸까요?;; 잘못된 지식을 가지고 있는건가;;
그럼 혹시 void** a; a = (void**)malloc(sizeof(void*)* n );
이런식으로 하면 될까요?;; ㄷㄷㄷㄷ -
푸른나래
하지만 void 를 사용할일이 없으니 void의 배열은 무의미하고 void* 배열은 선언할수 있으므로..
void* a[3]; 이런형태로 사용하면 되지 않을까 합니다... -
갅지삘여우
불가능합니다.
char a[10]; 배열에서
a[2]라는 것은 *(a + 2 * sizeof(char)) 이라는 뜻인데요
void b[10]; 배열에서는(컴파일이 될지도 의문이지만)
b[2]일때 *(b + 2 * sizeof(void))에서 sizeof(void)는 값이 없습니다.
그래서 배열을 사용할 수 없습니다.