인프런 커뮤니티 질문&답변
17강 포인터 조작과 출제패턴 / 08:40 / 메모리주소 관련 문의
해결된 질문
작성
·
47
0
안녕하세요.
영상에서 선언해 주신 str[], ptr_a, ptr_b 3개 변수의 메모리주소에 대해 문의드립니다.
char str[] = "Hello";
char *ptr_a = str;
> 포인터변수 ptr_a의 메모리주소는 배열변수 str과 동일하다.
char **ptr_b = &ptr_a;
> 이중포인터변수 ptr_b의 메모리주소는 포인터변수 ptr_a의 메모리주소와 동일하다.
이렇게 되면 str, &ptr_a, &ptr_b가 모두 동일한거 아닌가요?
이중포인터에 대해 이해가 부족해서 질문이 생겼을수도 있을거 같긴 한데, 영상 보면서 그때그때 궁금한게 생기면 일시정지하고 질문을 남기고 있어서 혹시 뒤에 설명해 주시는 내용이더라도 양해 부탁드립니다.
답변 2
0
안녕하세요, 영상을 조금 잘못 이해하신 듯 합니다.
우선 "포인터 변수 ptr_a의 메모리 주소는 배열 변수 str과 동일하다."가 틀렸습니다.
ptr_a는 그것대로 메모리 주소가 있고요, ptr_a가 가지고 있는 "값"이 str배열의 시작 주소입니다.
C언어에서 있는 모든 변수는 각자의 메모리 주소가 있습니다. 그러지 않고서는 메모리 상에서 동작하지 않을테니까요. 포인터 변수는 단순히 메모리 변수를 값으로 가질 수 있는 변수입니다. 그게 끝입니다.
나머지는 문법만 다른 것입니다.
마찬가지로 이중 포인터인 ptr_b도 마찬가지입니다. 그 변수에 해당하는 메모리 주소는 별도로 있고요.
ptr_b가 가지고 있는 값이 ptr_a의 메모리 주소입니다.
생각보다 단순합니다.
질문은 많이 해주세요.
0
안녕하세요, 인프런 AI 인턴입니다. 태0님.
질문해주신 부분은 포인터와 메모리 주소의 이해와 관련된 부분으로, C언어에서 흔히 헷갈리기 쉬운 개념입니다. 각 변수의 메모리 주소와 관련해 설명드리겠습니다.
char str[] = “Hello”;
str배열 자체는 여러 글자가 저장된 메모리의 시작 주소를 가집니다.str의 이름 자체로 배열의 시작 주소를 가리킵니다. 따라서 배열의 시작 요소인'H'의 메모리 주소를 나타냅니다.
char *ptr_a = str;
ptr_a는str의 시작 주소, 즉 배열의 첫 번째 요소'H'의 주소를 가리킵니다.ptr_a자체의 메모리 주소와str의 메모리 주소는 다릅니다.ptr_a에 저장된 값이str배열의 시작 주소와 같은 값을 가진다는 뜻입니다.
**char ptr_b = &ptr_a;
ptr_b는 포인터 변수ptr_a의 주소를 저장합니다. 즉,ptr_b는ptr_a가 저장된 메모리 위치를 가리키고 있습니다.ptr_b자체의 주소는ptr_a의 주소와는 다릅니다.
정리하자면, str 및 ptr_a는 배열의 첫 번째 요소의 주소와 관련이 있으며, ptr_b는 ptr_a의 주소, 즉 포인터의 주소입니다. 이 때문에 str, ptr_a, &ptr_b는 서로 다른 위치를 가리키는 것입니다.
참고로 이중포인터는 포인터를 가리키는 포인터입니다. 따라서 자료구조나 함수에서 포인터 그 자체를 변경하거나 다루고자 할 때 유용하게 사용됩니다.
유사한 포인터 관련 문의와 답변을 확인하시려면 아래 링크를 참고해 주세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




