2012-09-14 3 views
0

나는 C에서이 일을 시도하고 충돌 : 다음 오류로C에서 void 포인터를 배열로 사용할 수 있습니까?

int nValue=1; 
void* asd; 
asd[0]=&nValue; 

:

*error C2036: 'void**' *: unknown size 
error C2100: illegal indirection* 

나는 배열로 C의 무효 포인터를 사용할 수 있습니까?

내가 할 수 있다면 올바른 방법은 무엇일까요?

+2

'무효 *'역 참조 할 수 없지만 어떤 포인터 타입 사이에서 변환 할 수 있습니다. 즉, 당신은 여기에서'asd'를 초기화하지 않습니다 ... – oldrinb

+0

당신은 이것을 어떻게하고 있습니까? – chris

+0

당신이 무엇을 기대하고 있는지 확실하지 않습니다. – TJD

답변

0

이 같이 쓸 수 있습니다 :

int main() 
{ 
    int iv = 4; 
    char c = 'c'; 
    void *pv[4]; 
    pv[0] = &iv; 
    pv[1] = &c; 

    printf("iv =%d, c = %c", *(int *)pv[0], *(char *)pv[1]); 
    return 0; 
} 
3

Can I use a void pointer in C as an array?

아니요. void* (으)로 변환 할 수는 있지만이를 추론 할 수는 없으며 생각할 때 의미가 있습니다.

알려지지 않은 유형을 가리키며 크기도 알 수 없습니다. 따라서 기본 포인터에서 오프셋 할 바이트 수를 알지 못하고 쓸 수있는 바이트 수를 알지 못하기 때문에 포인터 연산 (asd[0])을 수행 할 수 없습니다.

asd (가능성이 높음)은 초기화되지 않았기 때문에 잘못된 메모리를 가리 킵니다. 이를 쓰거나 읽으면 정의되지 않은 동작이 호출됩니다.

+0

'sizeof (void)'가 정의되지 않았 음을 확인하십시오 ;-) – oldrinb

관련 문제