C++

[C++] ํฌ์ธํ„ฐ์™€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

carsumin 2024. 10. 7. 21:26
ํฌ์ธํ„ฐ
  • ์–ด๋–ค ๋Œ€์ƒ์ด ์œ„์น˜ํ•œ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜
// ํฌ์ธํ„ฐ ์„ ์–ธ ํ˜•์‹
// TypeName* ptrVar;

int* iPtr;

 

  • ํฌ์ธํ„ฐ๊ฐ€ ์œ ํšจํ•œ ๋Œ€์ƒ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ ํ›„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
int a;
int* iPtr = &a; // a๋ฅผ ๊ฐ€๋ฆฌํ‚ด
*iPtr = 10; // a์˜๊ฐ’ 10

 

 

ํฌ์ธํ„ฐ ์‚ฌ์šฉ ์˜ˆ์‹œ

 

#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    int* ptr;
    
    ptr = &a; // ptr์— a์˜ ์ฃผ์†Œ๋ฅผ ๋„ฃ์Œ
    cout << "ptr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’ : " << *ptr << endl; // ์ถœ๋ ฅ : 10
    *ptr = 20;
    cout << "๋ณ€์ˆ˜ a์˜ ๊ฐ’ : " << a << endl; // ์ถœ๋ ฅ : 20
    return 0;
}

 

 

๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
  • ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘ ์ค‘์— ๊ธฐ์–ต๊ณต๊ฐ„์˜ ํ•„์š”์„ฑ ๋ฐ ์†Œ์š”๋Ÿ‰์„ ๊ฒฐ์ •ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ
  • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น๋œ ๊ธฐ์–ต ๊ณต๊ฐ„์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
  • ๊ธฐ์–ต ๊ณต๊ฐ„์˜ ์ƒ์„ฑ ์‹œ์  : new ์—ฐ์‚ฐ์ž ์‹คํ–‰ ์‹œ์ 
  • ๊ธฐ์–ต ๊ณต๊ฐ„์˜ ์†Œ๋ฉธ ์‹œ์  : delete ์—ฐ์‚ฐ์ž ์‹คํ–‰ ์‹œ์ 
// ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์—ฐ์‚ฐ์ž
ptrVar = new TypeName;
ptrVar = new TypeName[n];

// ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜๋‚ฉ ์—ฐ์‚ฐ์ž (๋ฐ˜๋‚ฉ ํ˜•์‹ ํ†ต์ผํ•ด์ค˜์•ผํ•จ)
delete ptrVar;
delete [] ptrVar;

 

 

 

๋‹จ์ผ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์˜ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜

 

int* intPtr;
intPtr = new int;
*intPtr = 10;
...
delete intPtr;
intPtr = nullptr; // C++ 11ver๋ถ€ํ„ฐ ๋„์ž…. ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š์Œ

 

 

๋ฐฐ์—ด ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์˜ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜

 

int* intPtr;
intPtr = new int[4];
*intPtr = 10;
*(intPtr+1) = 20;
intPtr[2] = 30;

 

 

intPtr ๋ฐฐ์—ด์—๋Š” ์•„๋ž˜์™€๊ฐ™์ด ๊ฐ’์ด ํ• ๋‹น๋  ๊ฒƒ์ด๋‹ค.

10
20
30
 

 

// ๋ฐ˜ํ™˜
delete [] intPtr;
intPtr = nullptr;