void* 에 관하여
글쓴이: asleea / 작성시간: 금, 2012/06/29 - 2:37오전
void *a; int *b; a = b;
위의 코드와 같이 void*형에는 다른 타입의 포인터 형을 넣어도 문제가 없고
반대로 다른 타입의 포인터에 void포인터 형을 넣어주려면 아래와 같이
형 변환을 해주어야 된다고 알고있습니다.
void *a; int *b; b = (int*)a;
그런데 공부를 하다보니 예제 코드에서 형 변환 없이 사용을 하는 것이 많이 보이네요
형 변환을 해주어서 대입하는 것과 형 변환없이 대입하는 것이 어떤 차이점이 생기는 건가요.?
그리고 형 변환을 하지 않고 사용했을 때 문제는 없는 건가요 .?
Forums:
C하고 C++이 많이 다릅니다.
C에서는 다른 타입에서 void * 형으로, 혹은 그 역으로의 변환이 자유롭습니다.
이는 void * 가 범용 포인터 역할을 하기 때문입니다.
따라서 이런 종류의 형변환에서는 생략해도 상관 없고, 오히려 생략하는게 더 좋습니다.
반면에 C++에서는 서로 올바른 상속관계가 아니면 꼭 형변환 연산자를 붙여줘야 합니다.
포인터로 어떤 타입을 마치 다른 타입인 양 쓸 수 있다는 것이 굉장히 강력해서
마구 남용하기가 쉬운데,
그런건 꼭 필요한 상황에서, 어쩔 수 없을때만 하는게 좋습니다.
그리고 포인터의 심도있는 이해를 위해서 메모리 주소의
그리고 포인터의 심도있는 이해를 위해서
메모리 주소의 정렬 제한이라는 것에 대해서 찾아보시고 공부를 해 보시길 권합니다.
이 개념을 알면 C포인터에 달린 많은 제한들에 대해서
좀 더 이해가 쉽게 됩니다.
감사합니다 .
확인이 좀 늦었지만 감사합니다 .
malloc함수 사용시 return값이 void*라 항상 앞에 형변을 해주는 것을 볼 수 있는데 그럼
이 역시 형변환 없이 사용해도 상관이 없나요 .?
C에서는 빼고 되고 C++에서는 빼면
C에서는 빼고 되고 C++에서는 빼면 안됩니다.
양쪽에서 다 사용할 것을 염두에 두고 있다면 붙여야 합니다.
댓글 달기