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
1
안녕하세요! 헷갈리기 쉬운 부분인데 아주 좋은 질문이에요.
이 코드 기준으로 하나씩 짚어드릴게요
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
10
1
정처기 필기 준비할때 이 이론을 다시 외워도 될까요?
0
51
2
조건 반복문 질문: for 문 ?
0
62
1
정처기 26-2회. 9번 질문드립니다!
0
79
1
이론 보면서 질문이 있습니다.
0
75
2
정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문
0
87
2
유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)
0
148
2
262 정처기 실기 C언어코딩
0
46
1
정보처리기사 262 실기 Hash(해시) 질문
0
78
2
static 변수 질문입니다.
0
61
2
파이썬 4강 질문입니다.
0
68
2
모의고사 1회 3번문제
0
88
3
41강 30:10
0
67
2
이론 공부법 질문 있습니다.
0
89
2
부모의 생성자 관련 질문
0
66
2
시험지 문제에 필기해도 되나요?
0
89
3
41강 11:23
0
59
2
4강파이썬 질문입니다
0
54
2
try-catch 핸들러명
0
65
2
36강 3:48
0
64
2
35강 18:27
0
66
2
자식 코드 내 super() 생략
0
60
2
출력질문
0
75
2
31강 4:06
0
66
2





