void* ptr 이렇게 선언된 포인터변수 ptr이 struct a{ ... }a;
구조체 a를 가리키는 포인터로 변환하려면 강제로 형변환을 해줘야하나요? 아니면 ptr = &a 이런식으로 하게되면 자동으로 형변환이 되는걸까요?
일단 선언된 포인터 ptr의 타입은 변하지 않습니다.
ptr
ptr = &a와 같은 코드에서는 &a의 타입이 struct a *에서 void *으로 변환되지요.
ptr = &a
&a
struct a *
void *
void *ptr 형은 만능 포인트형이라고 합니다. 어떤 타입의 구조체던지 포인터(어드레스)는 모두 동일한 크기입니다. 그래서 어떤 형의 데이터 형이던지 형변환을 통해서 접근할 수 있죠.
아래와 같이 응용할 수 있습니다.
struct _a a; func((void *)&a); void func(void *ptr) { struct _a *a = (struct *_a)ptr; // do something }
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
???
일단 선언된 포인터
ptr
의 타입은 변하지 않습니다.ptr = &a
와 같은 코드에서는&a
의 타입이struct a *
에서void *
으로 변환되지요.void *ptr 형은 만능 포인트형이라고 합니다.
void *ptr 형은 만능 포인트형이라고 합니다. 어떤 타입의 구조체던지 포인터(어드레스)는 모두 동일한 크기입니다. 그래서 어떤 형의 데이터 형이던지 형변환을 통해서 접근할 수 있죠.
아래와 같이 응용할 수 있습니다.
댓글 달기