まず、c++では戻り値を書かないといけないので、
c++
1int function(int x){
2 //do something
3}
4```のようにしてください。
5
6本題ですが、配列の定義のときは要素数が実行前にわからないといけないので、"int x"のような普通の変数だと、普通の配列の要素数を決定できません。
7そこで、実行時にしかわからない数を要素数にするのには全く別の方法をつかいます。思いつく例を挙げると、
8```c++
9#include<memory>//std::unique_ptrに必要です
10#include<vector>//std::vectorに必要です
11
12int function(int x){
13 int *y_malloc = (int*)(malloc(sizeof(int) * x));//C言語の時代に使われたもので、malloc関数は引数の値だけ領域を確保します。intのバイト数と合わせるためにsizeof(int)をかけています。
14 int *y_new = new int[x];//newというのはc++にできた構文で、上のmallocに置き換えるとわかるとおもいます。
15 std::unique_ptr<int> y_smart(new int[x]);//上のnewを、delete(下記参照)しなくてもいいようにしたものです。このように、deleteする手間を省いてくれるのをスマートポインタと呼び、他にも数種類あります。
16 std::vector<int> y_vector(x);//自動でdeleteしてくれる上に、後から簡単に容量を変えたりできます。
17 //do something
18 free(y_malloc);//mallocで確保した領域は、free関数で開放しなければなりません。
19 y_malloc = nullptr;//なくてもいいです
20 delete[]y_new;//newで確保した領域は、deleteしなくてはなりません。(配列の場合はdelete[])
21 y_new = nullptr;//なくてもいいです
22}
ざっと挙げてみましたが、基本はvectorで問題ないと思います。しかし、他の方法もc++にはなくてはならないので、是非調べてみてください。