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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Yahoo!メール yahooメール使用できなくなった。 1 2022/07/05 11:45
- Java Java 年数計算 3 2023/01/28 10:52
- 音楽・動画 AndroidアプリのYYミュージックって違法みたいなんですがダウンロードしたらマズイですか? 中国 2 2023/03/24 20:38
- 数学 5組のデータ (xx,yy) = (1.0 , 1.1), (2.0 , 1.0), (3.0 , 2 2023/01/09 16:52
- Excel(エクセル) 年月表示を取り出すには 5 2023/02/23 22:51
- その他(住宅・住まい) 冬の札幌の暖房器具 4 2022/10/18 07:22
- 電車・路線・地下鉄 GV-E400系とキハ110系とでは、どちらが航続距離が長いか? 2 2023/07/24 07:53
- Excel(エクセル) LEFT関数で文字数を指定しないで取りだす方法 7 2023/06/30 09:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
RGB値を画像(PNG・BMPJPEGなど)...
-
パイソンの
-
テキストファイルから文字列を...
-
C# 配列の変数宣言について。
-
先頭アドレスとは何ですか?
-
複数の選択範囲の行番号を個別...
-
配列の参照渡しで型が一致しま...
-
C言語で巨大配列を作るにはどう...
-
配列を含む構造体の初期値について
-
C言語で特定列だけを抽出して配...
-
C言語 変換指定%sについてです。
-
【C言語】配列の中に配列を入れ...
-
unsigned char配列への入力の仕方
-
配列で格納したものをmsgboxで...
-
構造体配列を引数とするDLL作成...
-
vectorで文字列の配列を使う方法
-
Redimした動的配列はEraseする...
-
市販のビンゴカードについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列の参照渡しで型が一致しま...
-
配列を使わずに、変数名を動的...
-
VBで構造体の配列を関数に渡す...
-
配列で格納したものをmsgboxで...
-
unsigned char配列への入力の仕方
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
擬似コード 長さがmの配列でな...
-
【速いブラインドタッチ】手を...
-
パイソンの
-
C言語初心者 ポインタについて...
-
ExcelVBAで質問です。離れた二...
-
配列を含む構造体の初期値について
-
複数の選択範囲の行番号を個別...
-
Functionの戻り値を2次元配列...
-
C++ vectorに配列をプッシュしたい
-
先頭アドレスとは何ですか?
-
テキストファイルから文字列を...
-
Redimした動的配列はEraseする...
おすすめ情報