C++ ๊ณต๋ถ€ (7/21)

wsungยท2026๋…„ 1์›” 21์ผ

Day 7 โ€” ํฌ์ธํ„ฐ(pointer) ์™„์ „ ์ •๋ณต

๐ŸŽฏ ์˜ค๋Š˜ ๋ชฉํ‘œ

  • ์ฃผ์†Œ(address)๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ดํ•ด
    • ์™€ & ๊ธฐํ˜ธ์˜ ์ง„์งœ ์˜๋ฏธ
  • ํฌ์ธํ„ฐ ์„ ์–ธ / ์‚ฌ์šฉ / ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ด
  • ์ฐธ์กฐ(reference)์™€ ์ •ํ™•ํ•œ ์ฐจ์ด
  • ์™œ OS / MFC / RS232 ์ฝ”๋“œ์— ํฌ์ธํ„ฐ๊ฐ€ ๋„˜์น˜๋Š”์ง€ ๋‚ฉ๋“

ํฌ์ธํ„ฐ ํ•œ ๋ฌธ์žฅ ์ •์˜

  • ํฌ์ธํ„ฐ = "๊ฐ’์ด ์•„๋‹ˆ๋ผ, ๊ฐ’์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜"

์ฃผ์†Œ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ธฐ

  • ์ง‘ = ๋ฐ์ดํ„ฐ
  • ์ง‘ ์ฃผ์†Œ = ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ
  • ์ข…์ด์— ์ ์€ ์ฃผ์†Œ = ํฌ์ธํ„ฐ

์ฝ”๋“œ:
int a = 10;
์ปดํ“จํ„ฐ ์ž…์žฅ:
๋ฉ”๋ชจ๋ฆฌ ์–ด๋”˜๊ฐ€์—
[์ฃผ์†Œ: 0x10000] ๊ฐ’: 10

์ฃผ์†Œ๋ฅผ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ์ž &

int a = 10
int* p = &a;

  • &a : a๊ฐ€ ์‚ด๊ณ  ์žˆ๋Š” ์ฃผ์†Œ
  • int* p : int ์ฃผ์†Œ๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜

๋ฉ”๋ชจ๋ฆฌ ๊ทธ๋ฆผ
a : [0x1000] = 10
p : [0x2000] = 0x1000
=> p๋Š” a๋ฅผ ๊ฐ€๋ฆฌํ‚ด

*์—ฐ์‚ฐ์ž

  1. ์„ ์–ธํ•  ๋•Œ
    int* p;
  • p๋Š” int๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
  1. ์‚ฌ์šฉํ•  ๋•Œ(์—ญ์ฐธ์กฐ)
    *p = 20;
  • p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ทธ ๊ณณ์˜ ๊ฐ’

ex)

int a =10;
int* p = &a;

*p = 20;

std::cout<< a << std::endl;

=> 20

ํฌ์ธํ„ฐ๋กœ ํ•จ์ˆ˜์— ์›๋ณธ ๋„˜๊ธฐ๊ธฐ

void swap(int* x, int* y)
{
	int temp = *x;
    *x = *y;
    *y = temp;
}

int main()
{
	int a =10;, b=20;
    swap(&a, &b);
    
    std::cout << a << " " << b;

=> 20 " " 10

ํฌ์ธํ„ฐ vs ์ฐธ์กฐ

------------------------ํฌ์ธํ„ฐ----------------------์ฐธ์กฐ----
null๊ฐ€๋Šฅ ------------------O--------------------------X------
๋ณ€๊ฒฝ๊ฐ€๋Šฅ -----------------O--------------------------X------
๋ฌธ๋ฒ•๋‚œ์ด๋„------------์–ด๋ ค์›€----------------------์‰ฌ์›€-----
๋‚ด๋ถ€๊ตฌํ˜„-------------์ฃผ์†Œ์ง์ ‘----------------ํฌ์ธํ„ฐ๊ฐ์‹ผ๊ฒƒ---
์‚ฌ์šฉ๋ชฉ์ -----------์‹œ์Šคํ…œ/์ €์ˆ˜์ค€---------------๋กœ์ง/์•ˆ์ „----

๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„

int arr[3] = {1,2,3};
์‚ฌ์‹ค์ƒ
arr == &arr[0]

int *p = arr;
std::cout<< p[0] << std::endl;
std::cout<<*(p+1)<< std::endl;

-> p[i] == *(p+i)

nullptr

int* p=nullptr;
-> ์•„๋ฌด ๊ฒƒ๋„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š”๋‹ค.

์•ˆ์ „๊ทœ์น™
1. ํฌ์ธํ„ฐ๋Š” ์ดˆ๊ธฐํ™”
int* p = nullptr;
2. ์‚ฌ์šฉ ์ „ ์ฒดํฌ
if(p != nullptr)
3. ๋ˆ„๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์ธ์ธ์ง€ ๋ช…ํ™•ํžˆ

profile
0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฑ์—”๋“œ

0๊ฐœ์˜ ๋Œ“๊ธ€