이중 포인터를 이용한 값 변경 질문입니다.
이중 포인터를 이용한 값 변경 질문입니다.
const char* msg = "Hello";
1 번 함수
void SetMessage(const char* msg)
{
msg = "Bye" // 값이 변경되어지지 않음.
// *msg = "Bye" <= 불가능, 식이 수정할수 없는 lvalue
}
2 번 함수
void SetMessage(const char** msgPtr)
{
*msgPtr = "Bye" // 값이 변경됨.
}1번 : 함수의 경우 msg는 역참조가 불가능
1. 역참조 시 const 타입 주소로 이동.
2. const 타입은 값을 변경할 수 없는 형태임
3. 그래서 1번 함수에서 msg를 역참조해서 값을 변경하는 것은 불가능.
2번 : 함수의 경우 msgPtr은 역참조가 가능
1. msgPtr은 "Hello"주소값을 가지고 있는, msg 포인터를 가리키고 있음.
2. 역참조시 msg 포인터로 이동.
3. *msgPtr = "Bye"; <= 이 부분에서 혼동이 와서 질문드립니다.
질문 : 2번의 연장선
Hello의 시작 주소값은 편의상
HAddr이라고 칭하겠습니다.1. msg는 8바이트 형태의 포인터이다.
2. msg는 "Hello"의 시작 주소값
HAddr을 가지고 있다.3. 해당 시작 주소값은 'H'라는 값을 가지고 있다.
4. *msgPtr = "Bye"
5. 수행시 - 메모리에 'B', 'y', 'e'라는 값을 가지는 const char* 타입 변수 생성.
6. *msgPtr을 통해 msg 포인터를 역참조. - msg포인터가 가지고 있는 값
HAddr을 'Bye'의 시작 주소 값B의 주소값으로 변경?
답변 1
1
3. 해당 시작 주소값은 'H'라는 값을 가지고 있다.
-> 해당 시작 주소값을 타고 가면 'H'로 시작되는 데이터가 있습니다.
5. 수행시 - 메모리에 'B', 'y', 'e'라는 값을 가지는 const char* 타입 변수 생성.
-> 수행시가 아니라 컴파일 타임에 결정되며, 데이터 영역에 'Bye'라는 문자를 박은 결과물이 만들어지고 이 주소를 이용하게 됩니다.
그 외에는 다 맞네요! :D
소스코드와 관련하여 질문드립니다
0
65
1
map 컨테이너의 emplace 함수에 대해
0
105
2
시작이 안되네요...!
0
95
2
EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유
0
123
1
리틀 엔디안 장점 질문합니다.
0
129
1
메모리 창에 주소를 넣었는데 영어 꺠짐
0
123
1
타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.
0
93
2
map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.
1
138
2
hello world 부터 오류 ㅠㅜ
0
184
1
지역변수가 스택? 레지스터
0
126
2
마지막 문제 질문드립니다.
0
162
2
메모리창이 비활성화됩니다.
0
98
1
이중포인터 강좌 부분 질문있습니다.
0
145
1
2를 더하는 이유
0
131
1
메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다
1
109
1
해당 코드는 왜 오류가 날까요?
0
153
1
마지막 문제 질문 있습니다.
0
115
1
강의 마지막부분에 질문이 있습니다.
0
190
2
Field초기화
0
140
1
virtual과 override 차이
0
311
2
3:30 참조자 리턴
0
164
1
map 찾기
0
155
1
프로그램 질문드려요
0
255
1
캐스팅 질문
0
134
1





