初心者です。C++で
char a[]="asd";
のように代入できるが、
int a[]=123;
のように代入できないですか?
ちなみに、
int a1[3],a2[3];
int *p[2];
p[0]=a1,p[1]=a2;
//その後for文で
p[0][0]~p[2][3]に数を代入
のように作った二次元配列を関数に代入したいですが、どうすればいいですか?
void function(int *p){}
int main{
...
function(p);
このように書いたら、エラーが出ました。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/20 13:05
2018/01/20 13:08
回答3件
0
ベストアンサー
こんにちは。
"abc"
は、char型の値が合計4つ並んだものです。'a'
, 'b'
, 'c'
, '\0'
ですね。
これらをchar型の配列へ代入できます。
'123'は、int型の値が1つだけです。なので、配列へ代入できません。
もし、1, 2, 3を代入したいのであれば、下記にていけます。
int a[]={1, 2, 3};
2次元配列を関数に渡すのは色々面倒です。
生の配列の場合、C++が要素数をほとんど管理してくれないからです。
C++には便利な動的配列としてstd::vectorがあるので、これを使って2次元配列を作れば簡単です。
C++
1#include <iostream> 2#include <vector> 3 4typedef std::vector<std::vector<int> > Vector2D; 5 6void function(Vector2D& iVector2D) 7{ 8 for (size_t i=0; i < iVector2D.size(); ++i) 9 { 10 for (size_t j=0; j < iVector2D[i].size(); ++j) 11 { 12 std::cout << iVector2D[i][j] << " "; 13 } 14 std::cout << "\n"; 15 } 16} 17 18int main() 19{ 20 Vector2D aVector2D = { {1, 2, 3}, {4, 5, 6, 7} }; 21 function(aVector2D); 22}
なお、aVector2D の初期化処理のため、C++11でないとコンパイルできません。
C++11なら範囲ベースforを使うともう少しスマートにかけますが、あまり色々書くと混乱すると思いますので割愛します。
投稿2018/01/19 09:53
編集2018/01/19 09:56総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/20 07:49
2018/01/20 13:11
2018/01/20 13:25
2018/01/20 13:42
2018/01/20 13:54
0
こういうことですか?
C
1#include <stdio.h> 2 3void func(int *p[]) 4{ 5 *(p[0])= 1; 6 *(p[0]+1)= 2; 7 *(p[0]+2)= 3; 8 9 *(p[1])= 4; 10 *(p[1]+1)= 5; 11} 12 13int main() 14{ 15 int a1[3], a2[2]; 16 int *p[2]= { a1,a2 }; 17 18 func(p); 19 20 return 0; 21} 22
追記
c++
1usr~/test >./a.out 20:1 31:4 40:2 51:5 60:3 71:6 8usr~/test >cat tst1.cpp 9#include <iostream> 10 11using namespace std; 12 13void func(int *p[]) 14{ 15 for( int i= 0; i < 3; i++ ){ 16 cout << "0:" << *(p[0]+i) << endl; 17 cout << "1:" << *(p[1]+i) << endl; 18 } 19} 20 21int main() 22{ 23 int a1[3]= {1,2,3}; 24 int a2[3]= {4,5,6}; 25 int *p[2]= { a1,a2 }; 26 27 func(p); 28 29 return 0; 30} 31
投稿2018/01/20 13:35
編集2018/01/20 14:10総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「ちなみに、 」以下に関してだけ。C++特有ではなくC言語の範囲内ですが。
int *p[2]; とした場合、
void function(int p){}
ではなく
void function(int **p){}
にすれば
function(p);
で渡せるのでは?
(配列変数や関数定義のをそれぞれ1個ずつ減らした場合を考えてみるとわかりやすいかもしれません。)
投稿2018/01/20 13:22
総合スコア366
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/20 13:24
2018/01/22 02:35
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。