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
21
1
포인터 증감 또는 값 증감
0
18
1
배열 포인터 함수 관련
0
21
1
실기 이론 통합 요약본 버전
0
23
1
업캐스팅 3번 문제 예시
0
33
2
push pop 설명 되어있는 강의가 몇강인가요?
0
47
1
모의고사 파일오류
1
77
3
모의고사 다운
0
53
1
업캐스팅 원칙
0
65
2
6분46초
0
57
2
공략법
0
65
1
모의고사 파일과 이론파일 업데이트
1
74
3
이론 pdf 다운은 어디서 하나요?
0
72
2
13분 40초
0
65
2
정보처리기사 26년 실기 2회 네트워크 부분
0
78
2
기출문제 재탕
0
57
1
뻬먹은 코드
0
47
1
기출문제 재탕
0
37
0
모의고사1회 2번문제 뭔지 모르겠네요 강의올려주시면안될까요?
0
51
1
영상 다운로드는 안되나요?
0
81
1
26년2회 실기기출은 언제쯤...
0
126
2
이론 공부법 요약본 버전 업데이트 문의
0
109
2
정처기 필기 준비할때 이 이론을 다시 외워도 될까요?
0
115
2
조건 반복문 질문: for 문 ?
0
92
1





