二つのINT型の値を入力した後その二つの値でできる二次元配列を引数として関数に渡したいのですが、入力となると値がランダムなのでどのように関数にわたせばよいのかわかりません。どのように渡せばよいのでしょうか。
例
int a,b;
cin >> a >> b;//値を入力
array[a][b]の二次元配列を作成
void function(int a[][])//ここへの渡し方がわかりません
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
こんにちは。
std::vector<>を使うと良いですよ。
C++
1#include <iostream> 2#include <vector> 3 4 : 5 6std::size_t a, b; 7std::cin >> a >> b; 8std::vector< std::vector<int> > array(a, std::vector<int>(b, 0));
投稿2017/03/15 16:08
総合スコア23272
0
Variable Length Array は C99 の機能であり、C99では、次のように扱うことができます:
c
1 2int func_vla(int a, int b, int arr[a][b]) { 3 return arr[1][2]; 4} 5 6int main(void) { 7 int a, b; 8 a = 2, b = 3; // ここが std::cin の部分です 9 10 int arr[a][b]; 11 arr[1][2] = 3; 12 printf("%d\n",func_vla(a,b,arr)); 13} 14
** 追記:以下の記述は未定義動作を引き起こすとコメントを頂きましたので、用いないようにしてください。間違った回答をしたことをお詫びします。 **
これをそのまま C++ でコンパイルしようとしても動かないようですね。無理矢理動かすとしたら次のような形になるのでしょうか?
cpp
1 2int func(int *arr) { 3 return arr[5]; // main() でいうところの arr[1][2] にあたる 4} 5int main(void) 6{ 7 int a, b; 8 a = 2, b = 3; 9 10 int arr[a][b]; 11 arr[1][2] = 3; 12 std::cout << func(&arr[0][0]) << std::endl; 13 14 return 0; 15} 16
単に二次元配列を連続するメモリ領域とみて渡しているだけですが、 int func(int *arr)
内での添字に気をつけてください。
こうするよりは、std::vector
を利用するほうが簡単だと思います。あるいはまだa,bが定数ならもう少し簡単に扱えます(その場合でも std::array
を使うとこれまたより簡単だとは思いますが。)
投稿2017/03/15 16:27
編集2017/03/16 06:59総合スコア429
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/16 00:39 編集
2017/03/16 01:31
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/16 05:11