leokang123   1년 전

코드를 다음과 같이 짰는데

제가 name 이랑 ptr을 포인터 변수로 선언했으니까 결국

ptr = name 하면 name주소가 그대로 ptr에 복사가 되야하지 않나요??(얕은복사)

근데 주소는 처음에 할당된대로 유지되고 그 안에 문자열 내용만 그대로 복사가되서

왜 그런지 잘 모르겠어요

혹시나 해서 int형 포인터 변수 두개를 놓고도 대입해봤는데 이거 두개는 주소가 잘 복사가 되던데

char*에서는 원하는대로 되지 않아서 질문 남깁니다

peydihalta   1년 전

6번 라인 : character형 포인터 name 선언

7번 라인: character형 포인터 ptr 선언

8번 라인: 힙에 새로운 character 배열 할당 (크기 10byte) 후에 name에 주소값 대입

9번 라인: name은 할당된 character 배열 주소를, ptr는 쓰레기 주소를 출력하는게 아니라, 각각의 포인터가 저장된 곳의 주소를 출력합니다

10번 라인: name이 가리키고 있는 배열 공간에 새로 입력을 받음 

11번 라인: ptr에 name 포인터가 가리키고 있는 배열 공간의 주소값을 복사 (가리키는 대상은 동일하므로, 얕은 복사)

12번 라인: 여기서, 우리는 문자열의 주소값을 건네줬지만, 문자열의 주소를 넘기면 전체가 출력이 됩니다. 형식 지정자 %x를 이용하면 실제 문자열의 주소를 볼 수 있습니다.

ptr가 아닌 *ptr를 사용하면 정확히 해당 주소의 문자 하나만을 출력합니다.

13번 라인: 9번 라인에서 출력한 것과 동일한 주소의 동일한 값 출력.

leokang123   1년 전

감사합니다! 덕분에 나중에 헷갈리지 않을거 같아요 

댓글을 작성하려면 로그인해야 합니다.