
No.4ベストアンサー
- 回答日時:
inetdさんから既に補足に対する回答がついておりますが、少しだけかみ砕いて説明してきます。
int *yy[3];
この宣言をご覧下さい。
yyはポインタの配列ですよね。
つまりyy[0]やyy[1]にはそれぞれintの領域のアドレスを格納出来ることになります。
次にこちらをご覧下さい。
int x[3][3]={{8,2,3},{5,2,5},{4,7,1}};
このような定義の時、例えばx[1][0]は5ですよね。
また、&x[1][0]はそのアドレスですよね。
と同時に、x[1]の配列の先頭アドレスでもあります。
そして、&x[1][0]はそのままx[1]とも書き換えられます。
つまりyy[cnt] = x[cnt]とは、例えばcntが1ならば、intのアドレスを格納する領域yy[1]にint型の配列の先頭アドレスであるx[1]を格納しているわけです。
図にすると、
yy[1] x[1]
□ → □□□
と言う具合にyy[1]がx[1]の列の先頭を指している形になります。
解りにくかったら補足して下さい。
No.3
- 回答日時:
> for(cnt=0;cnt<3;cnt++){
> yy[cnt] = x[cnt];
> }
> なぜこれでできるのですか?cntになにか特別な?ただのintですよね?(゜ρ゜)
cntはただのintで別に特別なものではありません。
これはアクセスの方法の問題です。C言語の場合配列を表すように書くとその配列の先頭を指すポインタに変換されますよね。だからできるんです。
たとえば int x[3]; の宣言なら x は配列を表しますが、式の右辺で x を使用すると &x と同じ値になります。同様に int x[3][3]; で x[1] とすると &x[1] と同じになります。(これは通常 &x[1][0] と同じです。つまり先頭アドレス。厳密にいうと型が違うしどんなコンパイラでも同じとは限らないんですが、だいたいは同じになると思います)。
No.2
- 回答日時:
こんなのもありですよ。
int x[3][3]={{8,2,3},{5,2,5},{4,7,1}};
int *yy[3];
int cnt;
for(cnt=0;cnt<3;cnt++){
yy[cnt] = x[cnt];
}
これ以降、yyはポインタ配列のままで参照することもできますし、二次元配列として参照することも可能です。
ただし、yyが参照しているのはxの配列ですので、この場合どちらかから値に変更が加わればもう片方から見ても変わります。
(同じものを参照しているのだから当たり前ですね)
この場合
yy[0]={8,2,3}となるんですね。
さらにyy[0][0]=8
C言語のポインタの章で同じような事が書かれてました。
ありがとうございました。ただ、
int x[3][3]={・・・・}
int *yy[3];
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
yy[i][j]=xx[i][j];
}
}
でyy[i]={8,2,3}なら理解できるのですが、
for(cnt=0;cnt<3;cnt++){
yy[cnt] = x[cnt];
}
なぜこれでできるのですか?cntになにか特別な?ただのintですよね?(゜ρ゜)
No.1
- 回答日時:
宣言が
int x[3][3] = {{8,2,3},{5,2,5},{4,7,1}};
int yy[3][3];
の場合は for ループを使って
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
yy[i][j] = x[i][j];
のようにすれば全部代入されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
テキストファイルから文字列を...
-
4勤2休のシフト作成
-
配列を含む構造体の初期値について
-
Excel、VBAのユーザーフォーム...
-
先頭アドレスとは何ですか?
-
VBでC言語のポインタみたい...
-
mallocの確保要素数の限界は?
-
複数の選択範囲の行番号を個別...
-
配列を使わずに、変数名を動的...
-
[VBS] 動的配列について教えて...
-
ExcelVBAで質問です。離れた二...
-
C++ CString の 配列
-
VBで構造体の配列を関数に渡す...
-
銀行ATMの数字キーの配列
-
初期化について教えてください
-
シーケンスの解析に使うclustal...
-
intel fortranコンパイラについて
-
パスカルの三角形
-
配列の参照渡しで型が一致しま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
【速いブラインドタッチ】手を...
-
ExcelVBAで質問です。離れた二...
-
C言語で特定列だけを抽出して配...
-
配列を含む構造体の初期値について
-
配列で格納したものをmsgboxで...
-
配列をEraseしてもメモリが開放...
-
配列の参照渡しで型が一致しま...
-
先頭アドレスとは何ですか?
-
複数の選択範囲の行番号を個別...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
Excel、VBAのユーザーフォーム...
-
C言語 配列の再初期化
-
Redimした動的配列はEraseする...
-
【C言語】配列の中に配列を入れ...
おすすめ情報