μΌλ°μ μΈ λ³μμ λν ν¬μΈν°λ₯Ό 곡λΆνλ€λ³΄λ©΄,
μμ κ°μ λν ν¬μΈν°κ° κΆκΈν΄μ§ μ μμ΅λλ€.
const ν€μλλ‘ μ μΈνλ μμλ μλ€μνΌ κ·Έ κ°μ΄ μ μΈκ³Ό μ΄κΈ°ν μ΄νμ λ³κ²½ν μ μμ΅λλ€.
κ·Έλ¦¬κ³ ν¬μΈν°λ μμμ λν κΈ°λ₯λ μμ μνν μ μμ΅λλ€.
μμμ κ΄λ ¨λ ν¬μΈν°λ μ΄ μΈκ°μ§ μ’ λ₯λ‘ λΆλ₯ν μ μκ² μ΅λλ€.
- μμμ λν ν¬μΈν° (pointers to constants)
- μμ ν¬μΈν° (constant pointers)
- μμμ λν μμ ν¬μΈν° (constant pointers to constnats)
νλμ© μμλ³΄κ² μ΅λλ€.
1. μμμ λν ν¬μΈν° (pointers to constants)
μμμ λν ν¬μΈν°κ° κ°λ₯΄ν€λ λ°μ΄ν°λ μμμ΄κ³ , λ³κ²½λ μ μμ΅λλ€.
νμ§λ§ ν¬μΈν° μ€μ€λ‘λ λ³κ²½λκ³ λ€λ₯Έ κ°μ κ°λ₯΄ν¬ μ μμ΅λλ€.
μ½λλ‘ μμλ³΄κ² μ΅λλ€.
int num1{100};
int num2{50};
const int *ptr1{&num1}; // pointer to constant
cout << *ptr1 << endl;
*ptr1 = 80; // compile error
ptr1 = &num2; // okay
num1μ ν¬μΈν° ptr1μ const ν€μλμ ν¨κ» μ μΈν κ²½μ°,
μ΄λ₯Ό pointers to constants λΌκ³ μΉν©λλ€.
'const μ μΈμ ν¬μΈν° μμμ νλλ° μ μμμ λν ν¬μΈν°μΈκ°μ?'
νλ μ§λ¬Έμ΄ λ€ μ μμ κ² κ°μ΅λλ€.
μΌλ¨μ ptr1μ κ°, μ¦ κ°λ¦¬ν€λ μ£Όμμ λ³κ²½μ΄ κ°λ₯ν©λλ€.
κ°μ΄ λ³κ²½λλ 건 λ³μμ§ μμκ° μλκ² μ£ ?
κ·Έλ¦¬κ³ μμ μ½λμμλ μ μ μΌλ‘ μ μΈλ λ³μμ λν ν¬μΈν°μ¬μ μ΄λ¬ν μ§λ¬Έμ΄ λ€ μ μμ κ² κ°μ΅λλ€.
λμ μΌλ‘ μ μΈλ λ³μμ λν ν¬μΈν°μλ€κ³ μκ°μ ν΄ λ΄ μλ€.
int *my_ptr = new int(30);
*my_ptr = 50;
cout << *my_ptr << endl; // 50
30μΌλ‘ μ΄κΈ°νλ λμ λ³μμ λν ν¬μΈν° my_ptrμ μμμ λλ€.
ν΄λΉ λ³μκ° 50μΌλ‘ λ³κ²½ λμ΄λ μ무 λ¬Έμ κ° μμ΅λλ€.
const int *my_ptr = new int(30);
*my_ptr = 50; // compile error
cout << *my_ptr << endl; // 50
νμ§λ§ constλ‘ μ μΈλ κ²λ§ λ³κ²½λμμ λΏμΈλ°
κ·Έ κ°μ λ³κ²½ν μκ° μμ£ ?
μ΄λ° κ²½μ°λ₯Ό μ΄ν΄νλ©° μκ°ν΄λ³΄λ©΄ ν΄λΉ μ§λ¬Έμ λν λ΅μ΄ λμ¬ κ² κ°μ΅λλ€.
2. μμ ν¬μΈν° (constant pointers)
μμ ν¬μΈν°λ μμμ λν ν¬μΈν° μλ λ°λμ λλ€.
μ€μ€λ‘μ κ°, μ¦ ν¬μΈν νλ μ£Όμκ°μ λ³κ²½λ μ μμ΅λλ€.
κ·Έλ¦¬κ³ κ°λ¦¬ν€λ μ£Όμλ₯Ό λ€λ₯Έ μ£Όμλ‘ λ³κ²½ν μλ μμ΅λλ€.
νμ§λ§, κ°λ¦¬ν€κ³ μλ μμΉμ μλ κ°μ λ³κ²½μ΄ κ°λ₯ν©λλ€.
int high_score{100};
int low_score{50};
int *const score_ptr{&high_score}; // constant pointer
*score_ptr = 80; // okay
score_ptr = &low_score; // compile error
1λ² μμμλ λ°λμ λλ€.
κ°λ¦¬ν€λ μμΉμ κ°μ λ³κ²½λμ§λ§, μ€μ€λ‘κ° κ°λ¦¬ν€λ μμΉλ λ³κ²½λ μ μμ΅λλ€.
3. μμμ λν μμ ν¬μΈν° (constant pointers to constants)
3λ²μ μμμ λν μμ ν¬μΈν°μ λλ€.
1λ²κ³Ό 2λ²μ μ½μ΄λ΄€μΌλ©΄ λμΆ© μμμ΄ λμ€ κ²λλ€.
λμ ν©μΉ κ²μ΄ 3λ²μ λλ€.
μ¦, κ°λ¦¬ν€λ μμΉμ λν λ³κ²½λ λΆκ°λ₯νκ³ ,
κ°λ¦¬ν€λ μμΉμ μλ κ°λ λ³κ²½μ΄ λΆκ°λ₯ν©λλ€.
int num1{100};
int num2{50};
const int *ptr1{&num1}; // pointer to constant
cout << *ptr1 << endl;
*ptr1 = 80; // error
ptr1 = &num2; // error
'C++ > ν¬μΈν° (Pointers)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++] ν¬μΈν° μ°μ°/μ°μ (Pointer Arithmetic) (0) | 2023.12.19 |
---|---|
[C++] λ°°μ΄κ³Ό ν¬μΈν°μ κ΄κ³ (Relationship Between Arrays and Pointers) (1) | 2023.12.19 |
[C++] λμ λ©λͺ¨λ¦¬ ν λΉ (Dynamic Memory Allocation) (1) | 2023.12.19 |
[C++] μμ°Έμ‘° (Dereferencing a Pointer) (0) | 2023.12.19 |
[C++] λ°μ΄ν°μ μ£Όμμ μ κ·Όνλ λ°©λ² (1) | 2023.12.19 |