まずint x = {1,2,3}
構文エラーです。そのはずint x[] = {1,2,3};
これは未定義の動作です。自動配列には、それが定義されているブロック内に有効期間があるため、それはfoo()
関数内にあります。foo()
そのため、ストレージから戻るたびにx
、 が予約されている保証はなくなります。したがって、ポインターを介してその場所にアクセスする場合、動作は未定義です。
同じ結果を得るには、メモリを動的に割り当てます。
int *foo(void){
int x[] = {1,2,3}, *x_to_return;
x_to_return = new int [sizeof (x)/sizeof(x[0])];
memcpy (x_to_return, x, sizeof (x));
return x_to_return;
}
基本的に、必要なことは、を使用してストレージを動的に割り当て、new
データをによって割り当てられたメモリ ブロック (ベース) にコピーし、new
そのメモリ アドレスを呼び出し元に返すことです。
使用が終了したら、割り当てられたメモリを解放することを忘れないでください。そうしないと、コードでメモリリークが発生する可能性があります。
また、次のような宣言がある場合はstatic int x[] = {1,2,3};
、 のアドレスを返すことができます。x
この場合、 の有効期間はx
プログラムの実行時間全体であるためです。
あなたの質問には c++ とタグ付けされているのでvector
、moooeeeep の回答を確認してください。