void * 타입의 배열?
글쓴이: sangwoo / 작성시간: 월, 2003/10/27 - 10:18오전
C에서, 다음과 같은 활용이 가능한가요?
void *funcptr_array[3] = { funcptr1, funcptr2, funcptr3 };
이때 각각의 func_ptrn은 함수포인터이구요,
사용할 때는 다음과 같이..
funcptr = funcptr_array[1];
등으로.. (물론 funcptr 은 적절한 함수 포인터로 선언되어 있는 경우입니다.)
즉, 함수의 리턴값으로서가 아닌 배열의 타입으로서 void *를 선언하는것이 가능한가요?
Forums:
어떠한 변수의 타입이라는 것은 변수의 크기를 지정하는 것으로 본다면배
어떠한 변수의 타입이라는 것은 변수의 크기를 지정하는 것으로 본다면
배열의 타입이라는 것은 배열이 가지는 값의 한계를 나타낼 것입니다.
그러나 포인터는 다릅니다. 포인터는 그 크기가 이미 정해져 있기 때문입니다.
정수형의 포인터와 실수형의 포인터는 그 크기가 같습니다.
다만.. 그것이 가르키는 정수형의 변수와 실수형의 변수가 크기가 다른것입니다.
위에서 사용한 코드는 사용이 가능합니다만....
함수명은 실행코드의 실행순서에서 분기할 주소를 가지므로 형을 가진다고
볼 수 없습니다.
사용 가능합니다. 님의 코드를 자세히 보진 않았지만 가능하고요, 예전에
사용 가능합니다. 님의 코드를 자세히 보진 않았지만 가능하고요, 예전에 그렇게 쓴 적이 있습니다.
rommance.net
Re: void * 타입의 배열?
funcptr이 void *(*funcptr)(void) 형이라고 하면
위의 함수포인터의 배열은
void *(*funcptr_array[3])(void) = { funcptr1, funcptr2, funcptr3 };
로 선언되어져야 될 것 같습니다.
Re: void * 타입의 배열?
네.. 그렇지만 generic pointer를 사용해도 적법한지 궁금했던 거였습니다.
저는 generic pointer는 함수의 return형으로만 가능한게 아닌가 하는 생각을
가지고 있었거든요. 좀더 책을 읽어보니 변수에도 사용할 수 있는거 같네요.
가령
이 아무 문제 없는 코드가 되는군요. ;)
----
Let's shut up and code.
댓글 달기