' P '

whatever I will forget

C++ functionからpointerをreturnするとき

type *function() と関数を定義すれば、C++ポインターを関数からreturnさせることが可能です。

int *sample_function( int *ptr1, int *ptr2) {
    if *ptr1 < *ptr2
        return ptr1;
    else
        return ptr2;
}

みたいな感じです。

やっちゃいけないこと

これ重要と思います。 関数内のローカル変数を参照したポインターを返してはダメです
言い換えると、関数内ローカル変数のアドレスを含むものをreturnしてはダメということです。

下記例でいうと、size変数はstack内に定義されており、関数内処理が終わってからもsizeのアドレス値は使い続けられる。
次回に同じ関数が呼ばれたり、違う関数が呼ばれたりして、ポインターが使うstackエリアが再利用される。 その時のポインターがデータを上書きしてしまう場合がある。

int *ng_function () {
    int size {};
    .
    .
    return &size;
}
int *ng_function2 () {
    int size {};
    int size_ptr {&size}
    .
    .
    return size_ptr;
}