C++μμ ν¨μλ ν¬μΈν°λ€λ 리ν΄ν μ μμ΅λλ€.
κ·Έλ¬ν ν¨μλ€μ
type *funcion();
μ ννλ‘ μ μΈλ©λλ€.
νκ°μ§ μ€μν μ μ 'μ λλ‘ ν¨μ λ΄μ λ‘컬 λ³μλ₯Ό 리ν΄νμ§ μλλ€.' μ λλ€.
κ°λ¨ν μμ μ½λλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
int *largest_int(int *int_ptr1, int *int_ptr2){
if (*int_ptr1 > *int_ptr2)
return int_ptr1;
else
return int_ptr2;
}
λκ°μ μ μ ν¬μΈν°λ₯Ό λΉκ΅νμ¬ λ ν° κ°μ μ μμ ν¬μΈν°λ₯Ό λ°νν©λλ€.
μ΄ ν¨μλ₯Ό μ¬μ©νλ λ©μΈ ν¨μμ μμλ λ€μκ³Ό κ°μ μ μμ΅λλ€.
int main() {
int a {30};
int b {40};
int *largest_ptr{nullptr};
largest_ptr = largest_int(&a, &b);
cout << *largest_ptr << endl; // 40
// or
int a{30};
int b{50};
int *largest_ptr = {largest_int(&a, &b)};
cout << *largest_ptr << endl; // 50
return 0;
}
μ€μν μ μ &λ₯Ό νμ©νμ¬ pass by referenceλ₯Ό ν κ²κ³Ό,
ν¨μ λ΄μμ λΉκ΅ν κ²μ ν¬μΈν°μ κ°μ΄ μλ, ν¬μΈν° κ°μ κ°μ΄λΌλ μ μ
λλ€.
λ°°μ΄μ λν ν¨μλ‘ ν κ°μ§ λ μ½λλ₯Ό 보μ¬λλ¦¬κ² μ΅λλ€.
int *create_arr(size_t size, int init_val=0){
int *new_arr = new int[size]; // λ°°μ΄ μμ±
for (size_t i{0}; i < size; i++){
*(new_arr + i) = init_val; // μ΄κΈ°ν
}
return new_arr; // 리ν΄
}
int main() {
int *my_arr {create_arr(10, 50)}; // κΈΈμ΄ 10μ 50μΌλ‘ μ΄κΈ°νλ λ°°μ΄μ λν ν¬μΈν°
//λ°°μ΄ μΆλ ₯
for (size_t i{0}; i < 10; i++){
cout << *(create_arr + i) << endl;
}
delete [] my_arr;
return 0;
}
μ μκ° λ°°μ΄λ‘ λ³κ²½λ¬κ³ ,
λ¦¬ν΄ κ°μ΄ μμ±λ λ°°μ΄μ λν μ£Όμμ λλ€.
μ¬κΈ°μ ν·κ°λ¦΄ μ μλ μ μ 'λ‘컬 λ³μμ ν¬μΈν°λ λ°ννμ§ λ§λΌκ³ ν κ² μλκ°?' μ λλ€.
μ΄ κ·μΉμ μ΄μ λ λ‘컬 λ³μμ λ°μ΄ν°λ heap μμμ΄ μλ stack memoryμ μμ±λκΈ° λλ¬Έμ λλ€.
κ·Έλ¦¬κ³ μ΄ μμμ ν¨μμ νΈμΆλ‘ μμ±λκ³ λ¦¬ν΄μΌλ‘ μ¬λΌμ§λλ€.
νμ§λ§ ν μμμ μ‘΄μ¬νλ λ°μ΄ν°λ νλ² μμ±λλ©΄ μ¬λΌμ§μ§ μμ΅λλ€.
μ¦, ν¨μ νΈμΆ μ΄νμ ν¨μ μ’ λ£ μ΄νμλ κ³μ μ κ·Όν μ μλ κ°μΈ κ² μ λλ€.
μμ ν¨μμμ 보면, create_arr ν¨μ λ΄μμ
*new_arr ν¬μΈν°κ° μ μΈλκ³ λ¦¬ν΄λμμ΅λλ€.
μ΄ ν¬μΈν°κ° κ°λ¦¬ν€λ λ°°μ΄μ ν¨μ μμμμ μ겨λμ§ μκ³ ν μμμμ μκ²ΌκΈ° λλ¬Έμ,
μ΄λ₯Ό λ°νν΄λ λ¬Έμ κ° μλ κ² μ λλ€.
μ ν μμμμ μ긴건μ§λ λμ λ©λͺ¨λ¦¬ ν λΉμ κ΄λ ¨λ ν¬μ€νΈλ₯Ό μ½μΌλ©΄ μ΄ν΄νμ€ μ μμ΅λλ€.
κ·Έλ λ€λ©΄ μλͺ»λ μμλ€μ μ΄λ€κ²μΌκΉμ?
int *wrong_func(){
int size {};
...
return &size;
}
int *wrong_func2(){
int size{};
int *size_ptr {&size};
...
return size_ptr;
}
ν¨μ λ΄μμ μ μΈλ λ³μ sizeμ λν΄μ
κ·Έ κ° μ체 νΉμ κ·Έ κ°μ λν ν¬μΈν°λ₯Ό λ°ννλ κ²μ μλͺ»λμμ΅λλ€.
μλλ©΄ κ·Έ κ°μ΄ μ€ν μμμμ μμ±λμλ€κ°
ν¨μ νΈμΆ μ’ λ£ μ΄νμλ μ¬λΌμ§ κ°μ΄κΈ° λλ¬Έμ λλ€.
μ΄λ° λ¬Έμ λ λΉμ₯ κ°μμ μΈ μ€λ₯λ₯Ό λ°μμν€μ§ μμ μλ μμ§λ§,
μΈμ κ°λ μΉλͺ μ μΈ μ€λ₯λ₯Ό λ°μμν¬ μ λ°μ μμ΅λλ€.
μ΄λ¬ν κ°λ λ€μ ν©μΉ μμ μ½λμ λλ€.
#include <iostream>
using namespace std;
int *create_arrary(size_t size, int init_val = 0) {
int *new_storage = new int[size];
for (size_t i{0}; i < size; i++) {
new_storage[i] = init_val;
}
return new_storage;
}
void display_array(const int *const array, size_t size) {
for (size_t i{}; i < size; i++) {
cout << array[i] << " ";
}
}
int main() {
int *my_array = create_arrary(5, 100);
display_array(my_array, 5);
delete[] my_array;
cout << endl;
return 0;
}
'C++ > ν¨μ (Function)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++] transform (0) | 2024.01.05 |
---|---|
[C++] c_str() ν¨μ (0) | 2023.12.23 |
[C++] μ¬κ· ν¨μ (Recursive Function) (0) | 2023.12.18 |
[C++] μ°Έμ‘°λ‘ μ λ¬νκΈ° (Pass by Reference) (1) | 2023.12.17 |
[C++] ν¨μμ λ°°μ΄μ 맀κ°λ³μλ‘ μ¬μ©ν λ (Passing Arrays To Functions) (3) | 2023.12.17 |