Cộng đồng Hỏi & Đáp của Inflearn
포인터
Đã giải quyết
Viết
·
47
0
**a = &b 와 *a = b 가 같은 말이라고 생각해도 되나요?
Câu trả lời 2
0
안녕하세요, 우선 b가 배열인지 아니면 원시 자료형인지에 따라 달라집니다.
(배열의 이름은 그 자체로 주소를 표현하기 때문에 달라질 수 있습니다.)
단순히 2가지만 비교하자면 같은 표현은 아닙니다.
*a = b
이 코드는 a가 가리키는 위치에 b 값을 저장한다는 뜻입니다.
int b = 10;
int x;
int *a = &x;
*a = b;
**a = &b
이건 이중 포인터 상황입니다.
int b = 10;
int x;
int *p = &x;
int **a = &p;
**a = b;
대략적으로 설명드리자면,
*a = b a가 가리키는 곳에 b 저장
**a = b a가 가리키는 포인터가 가리키는 곳에 b 저장
*a = &b a가 가리키는 곳에 b의 주소 저장
**a = &b 타입이 맞지 않아 보통 오류
이렇게 됩니다.
ptr_b는 이중포인터입니다.
그 이야기는 정의한 다음에 별표 하나만 쓰면, 주소를 가리킬 수 있다는 의미입니다.
(포인터에 대한 포인터이기 때문입니다.)
str2도 배열 이름이기 때문에 주소를 가리킵니다.
그래서 ptr_b의 값에(포인터) 배열의 이름을 넣은 것입니다.
그것이 곧 ptr_a의 주소이죠. 왜냐하면 현재 ptr_b는 ptr_a의 주소가 들어가있는데,
ptr_a 포인터 주소의 값은 ptr_a가 가리키고 있는 곳이기 때문입니다.
(헷갈리시겠지만 아래에 별도로 그려보겠습니다.)
그곳에 str2를 넣으면 ptr_a는 곧 그 배열의 시작주소를 가리키게 됩니다.
아래 도표를 살펴봅시다.
주소와 값은 항상 공부하실 때 박스를 그려놓고 위 아래를 나눠서 그린 후,
각각 따로 작성하면서 따라가시는 것이 좋습니다.
주소와 값을 아래처럼 생각해봅시다.
주소 값
1001 'H'
1002 'e'
1003 'l'
1004 'l'
1005 'o'
1006 '\0'
포인터의 관계는 이렇습니다.
str
│
▼
1001 ── 'H'
1002 ── 'e'
1003 ── 'l'
1004 ── 'l'
1005 ── 'o'
1006 ── '\0'
ptr_a
│
▼
1001 (str을 가리킴)
ptr_b
│
▼
ptr_a 의 주소ptr_b → ptr_a → str → "Hello"
단계별로 해석하면 이렇게 됩니다.
ptr_b → ptr_a
*ptr_b → ptr_a
(*ptr_b + 1) → 'e'
그래서 ptr_b가 ptr_a를 바꾸는 과정은
ptr_b → ptr_a → "Hello" 이렇게 되어있던 것이
ptr_b → ptr_a → "World" 이렇게 바뀝니다.
ptr_a가 가리키고 있는 대상이 바뀐다는 의미입니다.
변경 후 메모리 구조는
str → "Hello"
str2 → "World"
ptr_a → str2
ptr_b → ptr_a이렇게 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. dlawltn52님.
a = &b와 *a = b는 C언어에서 포인터와 관련된 다른 개념을 나타내는 것으로, 두 문장은 의미가 다릅니다. 각각을 설명드리겠습니다.
a = &b:a는 포인터 변수로,b의 주소값을 저장하게 됩니다. 즉,a는 이제b의 메모리 주소를 가리키게 됩니다.
- 이를 통해
a를 통해b의 값을 간접 참조할 수 있게 됩니다.
*a = b:a는 포인터 변수로, 이미 특정한 메모리 주소를 가리키고 있어야 합니다.
*a는a가 가리키는 주소에 저장된 값을 의미하며, 이를b로 변경하는 역할을 합니다. 즉,b의 값을 변수 또는 메모리 주소에 저장(copied)하게 되는 것입니다.
결론적으로, a = &b는 포인터 a가 b의 주소를 가리키도록 설정하는 반면, *a = b는 포인터 a가 가리키고 있는 위치에 b 값을 저장하는 것입니다. 따라서 두 표현은 다르게 동작하며, 서로 같은 의미로 보시면 안 됩니다.
이와 관련된 포인터의 동작과 사용법에 대한 더 많은 정보를 원하시면, 아래의 유사 질문들을 참고하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





13:55에서 *ptr_b = str2 부분에서 ptr_a의 값이 바뀐다고 되어 있는데 이거는 다른 상황이라고 이해하면 되나요?