配列の配列 – プログラミング – Home

通知
すべてクリア

[解決済] 配列の配列


ろろ
 ろろ
(@ろろ)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

2次元配列のさらに配列を作りたいのですがうまくいきません。
以下のプログラムのようにしてもコンパイルエラーがでます。
どうすれば可能になるでしょうか?

int aaa[2][3];
int bbb[2][3];
int ccc[2][3];

//int (int(*)[2][3])ddd[3] = {aaa,bbb,ccc}; //エラー
//int (int(*ddd)[2][3])[3] = {aaa,bbb,ccc}; //エラー
int (*ddd)[2][3])[3] = {aaa,bbb,ccc}; //エラー

int a,b,c;
a = ddd[0][0][0]; //aaa[0][0]を取りたい
b = ddd[1][0][0]; //bbb[0][0]を取りたい
c = ddd[2][0][0]; //ccc[0][0]を取りたい


引用未解決
トピックタグ
気分屋
 気分屋
(@気分屋)
ゲスト
結合: 19年前
投稿: 15
 

VC6.0にてコンパイル確認。

#include <stdio.h>

int main( void )
{
int aaa[2][3] = { 0 };
int bbb[2][3] = { 0 };
int ccc[2][3] = { 0 };
int (*ddd[])[3] = { aaa, bbb, ccc };

aaa[0][0] = 10;
bbb[0][0] = 20;
ccc[0][0] = 30;

printf( %d, %d, %d\n, ddd[0][0][0], ddd[1][0][0], ddd[2][0][0] );

return 0;
}


返信引用
ろろ
 ろろ
(@ろろ)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

ありがとうございます。
正常にコンパイルされまして値も取れました。

ただ、[2]の情報が指定されていないせいか、
ウォッチで確認しようとしてもみれません。
[2]を指定するやり方はありますでしょうか?
単純に、
int (*ddd[2][3])[3] = { aaa, bbb, ccc };
としてもコンパイルエラーでうまくいきませんでした。


返信引用
気分屋
 気分屋
(@気分屋)
ゲスト
結合: 19年前
投稿: 15
 

ちょっと私には、他のやり方を知りません。
知っている方にお任せします。

ただ単純にウォッチ内で値を見るなら
ウォッチに「ddd」と記述するのではなく
ddd[0][0]
ddd[0][1]
ddd[1][0]
ddd[1][1]
ddd[2][0]
ddd[2][1]
と記述してやれば見れなくはありませんが
根本的な解決ではないですね。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

えー、欲しいのは本当に「配列の配列」でしょうか。
提示例は「【配列へのポインタ】の配列」ですから想定のものとは違います。
それとも、既存の配列3つを初期値とする新しい別の配列を作りたい?

typedef int a23[2][3];
a23* d[3]={ &a, &b, &c}; なら「【配列へのポインタ】の配列」と理解できますか?
ならばこの typedef を展開して int (*d[3])[2][3]={&a,&b,&c}; とします。


返信引用
ろろ
 ろろ
(@ろろ)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

レスありがとうございます。

>えー、欲しいのは本当に「配列の配列」でしょうか。
>提示例は「【配列へのポインタ】の配列」ですから想定のものとは違います。
>それとも、既存の配列3つを初期値とする新しい別の配列を作りたい?
やりたいことの正確な名前はよくわかりませんが、
aaa,bbb,cccの名前の違う配列をループで処理したいです。
こんな感じで、
for(i=0;i<3;i++)
{
printf(%d ,ddd[i][0][0]);
}

>int (*d[3])[2][3]={&a,&b,&c};
試してみたらエラーがでました。
どこか間違っていますか?

int aaa[2][3];
int bbb[2][3];
int ccc[2][3];

int (*ddd[3])[2][3]={&aaa,&bbb,&ccc};

int a,b,c;
a = ddd[0][0][0]; //エラー
b = ddd[1][0][0]; //エラー
c = ddd[2][0][0]; //エラー

エラー内容:
'int [3]' から 'int' に変換することはできません。


返信引用
DD.
 DD.
(@DD.)
ゲスト
結合: 19年前
投稿: 10
 

int (*ddd[3])[2][3] = { &aaa, &bbb, &ccc };
aaa, bbb, ccc のアドレスを渡しているので、

a = *ddd[0][0][0];
b = *ddd[1][0][0];
c = *ddd[2][0][0];
となります。


返信引用
ろろ
 ろろ
(@ろろ)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

レスありがとうございます。
DD.さんのやり方でコンパイルできました。
ただ、ウォッチはおかしいままです。

ウォッチは重要でないしあきらめることにします。
皆さんありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました