์ญ์ฐธ์กฐ (Dereferencing)
๋ชจ๋ ์๋ค์ํผ ํฌ์ธํฐ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ์ ์ฅํด๋๋ ๋ณ์์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ฃผ์๋ฅผ ํตํด์ ์ํ๋ ์์น์ ๋ฐฉ๋ฌธํฉ๋๋ค.
C++์์๋ ๋์ผํฉ๋๋ค.
๋น์ฐํ ํฌ์ธํฐ์ ๊ฐ์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์๋ค๋ฉด,
๊ทธ ์ฃผ์๋ฅผ ํตํด ํด๋น ์์น์ ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์๋ ์๊ฒ ์ฃ ?
์ด๊ฒ์ ์ฐ๋ฆฌ๋ ์ญ์ฐธ์กฐ (Dereferencing) ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
ํฌ์ธํฐ๋ฅผ ์ ์ธํ ๋, ๋ณ์์ ๋ค๋ฅธ ๋ถ๋ถ์ด ์ด๋ค ๊ฒ์ด์๋์ง ๊ธฐ์ต์ด ๋์๋์?
๋ณ์์๋ ๋ค๋ฅด๊ฒ ํฌ์ธํฐ์ ์ด๋ฆ ์์ asterisk(*) ๋งํฌ๋ฅผ ๋ถ์์ต๋๋ค.
ํฌ์ธํฐ๊ฐ ๊ฐ๋ฅดํค๋ ๊ฐ(์ฃผ์)๋ฅผ ๋ฐ๋ผ๊ฐ์ ์๋ ์์น์ ์ ์ฅ๋ ๊ฐ์ ์กฐํํ ๋๋ ๋์ผํฉ๋๋ค.
๋ณ์๋ช ์์ *๋ฅผ ๋ถ์ด๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ ์ธํ ๋์ ๋์ผํ syntax์ฌ์ ์กฐ๊ธ์ ํท๊ฐ๋ฆด ์๋ ์๊ฒ ์ง๋ง,
์ฃผ์ด์ง ์ฝ๋๋ฅผ ์ ์ฒด์ ์ผ๋ก ์ดํดํ๊ณ ๋๋ฉด ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ ์์๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
#include <iostream>
using namespace std;
int main() {
int score{100};
int *score_ptr{&score};
cout << *score_ptr << endl; // 100
*score_ptr = 200;
cout << *score_ptr << endl; // 200
cout << score << endl; // 200
}
์ ์ ๋ณ์ score๊ณผ score์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ score_ptr ํฌ์ธํฐ๊ฐ ์์ต๋๋ค.
*score_ptr๋ฅผ ์ถ๋ ฅํ๋ score_ptr๊ฐ ๊ฐ๋ฅดํค๋ score์ ๊ฐ์ธ 100์ด ์ถ๋ ฅ๋ฉ๋๋ค.
*score_ptr ๊ฐ์ ๋ณ๊ฒฝํ๋ score์ ๊ฐ์ด ์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝ๋์ด 200์ด ๋ฉ๋๋ค.
๋ง์ง๋ง ์ค์์ ์ด ๋ณํ๊ฐ ํ์ธ๋ฉ๋๋ค.
๋ค๋ฅธ ์์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
#include <iostream>
using namespace std;
int main() {
double high_temp{100.5};
double low_temp{30.1};
double *temp_ptr{&high_temp};
cout << *temp_ptr << endl; // 100.5
temp_ptr = &low_temp;
cout << *temp_ptr << endl; // 30.1
}
ํ๊ฐ์ ํฌ์ธํฐ๋ก ์ฃผ์๊ฐ์ ๋ณ๊ฒฝํ๋ฉฐ ์ถ๋ ฅํ ์์์ ๋๋ค.
'C++ > ํฌ์ธํฐ (Pointers)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ์ ๊ด๊ณ (Relationship Between Arrays and Pointers) (1) | 2023.12.19 |
---|---|
[C++] ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (Dynamic Memory Allocation) (1) | 2023.12.19 |
[C++] ๋ฐ์ดํฐ์ ์ฃผ์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ (1) | 2023.12.19 |
[C++] ํฌ์ธํฐ์ ์ ์ธ (Declaring Pointers) (0) | 2023.12.19 |
[C++] ํฌ์ธํฐ(Pointer)๋? (0) | 2023.12.19 |