강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

신유진님의 프로필 이미지
신유진

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.9 포인터 연산 총정리

10.9 강의에서 9분경 casting

작성

·

42

1

image.png

 

워닝을 막기 위해 데이터타입을 임의로 바꿔주고 있는데

double형 변수의 주소값을 저장하기 위해선 포인터도 똑같이 double형으로 선언해줘야한다고 배웠습니다.

강의에서처럼 임의로 int형 포인터로 바꾸면 원래 double형의 주소값을 저장하고 있던 포인터 변수에는 아무런 변화가 없나요?

 

제가 맞게 이해하고 있는 것인지 모르겠습니다만,

예를 들어 그냥 일반적인 변수 casting을 할 때,

실수 float형을 int형으로 형 변환을 한다면 int형은 float형에 담겨있던 데이터를 모두 나타내지 못 하기 때문에 소수점 뒤에 있는 숫자들이 잘리면서 데이터에 변화(?)가 생기지 않습니까?

 

포인터 변수에서는 이와 같은 문제가 생기지 않는 것인지 궁금합니다.

답변 2

1

안녕하세요? 질문&답변 도우미 Soobak 입니다.

우선, 포인터의 타입을 형변환하여도 메모리 데이터 자체는 변화하지 않습니다.
하지만, 잘못된 타입으로 해석하게 되는 경우가 발생할 수 있습니다.
즉, 말씀하신 내용처럼 자료형에 따라서 메모리를 잘못 해석할 가능성이 있습니다.
따라서, 부득이한 경우 외에는 가리키는 데이터 자료형 크기가 다른 포인터를 다른 타입으로 형변환하지는 않습니다.
이러한 문제점에 대한 내용을 학습하기 위한 예시 중 하나로 이해하시면 좋을 것 같습니다.
추가적으로, 강의 중 언급된 내용처럼, 객체지향의 다형성과 관련하여 void* 으로의 형변환 혹은, C++ 에서는 reinterpret_cast 등과 같이 명시적으로 형변환을 사용하는 경우도 있다는 정도만 인지해두시면 도움되실 것 같습니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.

신유진님께서 질문 주신 내용을 바탕으로, 포인터의 형 변환과 이에 따른 데이터 변화 여부에 대해 설명드리겠습니다. 먼저 질문의 요점을 이해하기 쉽게 요약하겠습니다.

포인터의 경우, 변수의 주소값을 저장하는 용도로 사용됩니다. 포인터를 다른 타입으로 캐스팅할 때, 실제 메모리 주소값 그 자체는 변하지 않습니다. 대신 포인터가 가리키는 데이터의 해석 방법이 달라질 수 있기 때문에 주의가 필요합니다.

예를 들어, double형 변수를 가리키는 포인터를 int*로 캐스팅해도, 해당 포인터가 저장하는 주소값 자체는 변화가 없습니다. 다만, 이 포인터로 double형 데이터를 접근하려 할 때, 제대로 된 값이 반환되지 않을 수 있습니다. 이는 메모리의 해석 방식이 달라지기 때문입니다.

포인터와 일반 변수의 차이를 이해하기 위해, 포인터는 데이터 그 자체를 저장하는 것이 아니라 데이터의 주소를 저장하기 때문에, 형 변환이 메모리 상의 데이터에 직접적인 영향을 미치지 않습니다.

유사한 질문과 답변을 확인하고 싶다면, 아래 링크들을 참조하세요:

  1. 포인터 캐스팅과 자료형의 차이
  2. 워닝 없이 포인터 비교하기

이 답변이 신유진님의 이해에 도움이 되었기를 바랍니다. 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서도 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

신유진님의 프로필 이미지
신유진

작성한 질문수

질문하기