08:30 이중포인터 질문
char *ptr_a=str;
char **ptr_b=&ptr_a;
ptr_a는 str 배열의 주소를 저장한 포인터로 선언이 된거고, ptr_b는 ptr_a 주소를 저장한 포인터인데, ptr_b 포인터를 선언할 때 *이거 별표를 꼭 2번 써야 하는건가요?
char *ptr_b=ptr_a;
이렇게 선언하면 안되는건지, 그리고 ptr_a도 배열인데 앞에 &를 쓰면 오류가 아닌지 헷갈립니다.
답변 1
0
안녕하세요! 헷갈리기 쉬운 부분인데 아주 좋은 질문이에요.
이 코드 기준으로 하나씩 짚어드릴게요
1. 별표(*) 개수는 "몇 단계를 건너야 실제 값이 나오는가"를 뜻해요
str→ 실제 문자들이 담긴 배열ptr_a→ str의 주소를 담음 (1단계) → 그래서char *ptr_b→ ptr_a의 주소를 담음 (2단계) → 그래서char **
즉 &ptr_a의 타입 자체가 char **예요.
담는 그릇(ptr_b)도 똑같이 char **여야 타입이 맞습니다.
별표를 하나만 쓰면 단계가 안 맞아서 오류가 나요.
2. char *ptr_b = ptr_a;는 오류는 아니지만, 의미가 완전히 달라져요
이렇게 쓰면 → ptr_b가 ptr_a와 똑같이 str을 가리킴
원하시는 것 → ptr_b가 ptr_a를 가리킴 (
char **ptr_b = &ptr_a;)
앞의 방식으로 쓰면 아래 *ptr_b = str2; 같은 이중 포인터 동작을 할 수 없어요.
"ptr_a의 주소를 저장"하려면 반드시 **와 &를 함께 써야 합니다.
3. ptr_a 앞에 &를 쓰는 건 전혀 문제없어요
배열은
str이고,ptr_a는 엄연한 포인터 **"변수"**예요변수는 자기만의 주소를 가지므로
&ptr_a도 당연히 가능하고그 결과가 바로
char **타입입니다
한 줄 요약
&→ "그 변수가 저장된 주소를 달라"*개수 → "그 주소가 몇 단계짜리 포인터인지"
이 둘을 짝지어 생각하시면 훨씬 덜 헷갈리실 거예요. 화이팅입니다! :)
정처기 질문
0
12
2
자식 기본 생성자 출력 조건
0
7
1
부모 및 자식 기본생성자 호출
0
10
1
포인터 16강 9:44
0
9
1
6강 17:50
0
15
2
6강 11:37
0
20
2
6강 5:15
0
25
1
5강 5:45
0
19
2
전체적으로 답을 먼저 알려주지 마세요..
0
25
2
업캐스팅 문제 예시 5
0
46
2
(기출) 2025년 2회 이론 파트
0
42
2
26년 1회실기
0
50
2
강의 자료
0
43
2
27:15 break 출력
0
41
2
55강 파이썬에만있는 연산자들
0
39
2
55강의 파이썬에서만 있는 연산자들
0
30
2
29강 5:00
0
36
2
띄어쓰기
0
45
2
공부 순서
1
61
2
재귀함수 연산법
0
36
2
26년 1회차 기출 강의
0
68
2
기출문제
0
68
1
C언어에서
0
66
1
포인터 질문
0
63
2





