掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24534

ポインタ
投稿者---kimi(2005/12/05 09:49:05)


ポインタ配列を用いて三次元配列cube[3][3][3]を作って、要素順に{1〜26}のデータを代入し、cube[1][1][1]の値を出力したいんですけど

#include <stdio.h>
int main(){
int ***cube[3][3][3],cube1[1][1][1]={{0,1,2,3,4,5,6,7,8,9}};
cube2[2][2][2]={{10,11,12,13,14,15,16,17,
18}}
cube3[3][3][3]={{19,20,21,22,23,24,25,26}}

printf("%d %d %d" cube[1][1][1] sizeof cube);
return 0;
}


と書いてみたんですが成功しません。なにが違うんでしょうか??for
とかつかうんでしょうか?なにぶん初心者のため、誰かご指導お願いします。





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタ 24535 kimi 2005/12/05 09:55:19
<子記事> Re:ポインタ 24536 RiSK 2005/12/05 10:26:23
<子記事> Re:ポインタ 24537 RiSK 2005/12/05 12:38:06
<子記事> Re:ポインタ 24573 shu 2005/12/06 13:31:51


No.24535

Re:ポインタ
投稿者---kimi(2005/12/05 09:55:19)


cube1[1][1][1]={{0,1,2,3,4,5,6,7,8,}},
cube2[2][2][2]={{9,10,11,12,13,14,15,16,17}},
cube3[3][3][3]={{18,19,20,21,22,23,24,25,26}};

です。すいません。


この投稿にコメントする

削除パスワード

No.24536

Re:ポインタ
投稿者---RiSK(2005/12/05 10:26:23)


>ポインタ配列を用いて三次元配列cube[3][3][3]を作って、要素順に{1〜26}のデータを代入し、cube[1][1][1]の値を出力したいんですけど

何をしたいのか分かりませんが,以下は参考になりますか?
#include <stdlib.h>
int main(void) {
    {
        int i, j, k;
        int a[3][3][3];
        for (i = 0; i < 3; ++i)
            for (j = 0; j < 3; ++j)
                for (k = 0; k < 3; ++k) a[i][j][k] = 0;
    }
    {
        int i, j, k;
        int (*b)[3][3] = malloc(sizeof(int [3][3]) * 3);
        for (i = 0; i < 3; ++i)
            for (j = 0; j < 3; ++j)
                for (k = 0; k < 3; ++k) b[i][j][k] = 0;
    }
    {
        int i, j, k;
        int (**c)[3] = malloc(sizeof(int *[3]) * 3);
        for (i = 0; i < 3; ++i) c[i] = malloc(sizeof(int));
        for (i = 0; i < 3; ++i)
            for (j = 0; j < 3; ++j)
                for (k = 0; k < 3; ++k) c[i][j][k] = 0;
    }
    {
        int i, j, k;
        int ***d = malloc(sizeof(int **) * 3);
        for (i = 0; i < 3; ++i) {
            d[i] = malloc(sizeof(int *) * 3);
            for (j = 0; j < 3; ++j) {
                d[i][j] = malloc(sizeof(int) * 3);
            }
        }
        for (i = 0; i < 3; ++i)
            for (j = 0; j < 3; ++j)
                for (k = 0; k < 3; ++k) d[i][j][k] = 0;
    }
}



この投稿にコメントする

削除パスワード

No.24537

Re:ポインタ
投稿者---RiSK(2005/12/05 12:38:06)


/*
>ポインタ配列を用いて三次元配列cube[3][3][3]を作って、
>要素順に{1〜26}のデータを代入し、
>cube[1][1][1]の値を出力したいんですけど

三次元配列 cube[3][3][3] を 0〜26 で初期化し,
一次元ずつ出力したい。

と解釈。
*/
#include <stdio.h>
void print(int (*cube)[3][3], int i, int j) {
    printf("%d %d %d\n", cube[i][j][0], cube[i][j][1], cube[i][j][2]);
}
int main(void) {
    int cube[3][3][3] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
    int i, j;
    for (i = 0; i < 3; ++i)
        for (j = 0; j < 3; ++j)
            print(cube, i, j);
}



この投稿にコメントする

削除パスワード

No.24565

Re:ポインタ
投稿者---kimi(2005/12/06 09:44:40)


自分でやってみて成功はしたんですけど、画面に出力されません。どこがおかしいでしょうか?
#include<stdio.h>
int main(){
**cube[3][3],
cube0[3][3]={"0,1,2,3,4,5,6,7,8"},
cube1[3][3]={"9,10,11,12,13,14,15,16,17"},
cube2[3][3]={"18,19,20,21,22,23,24,25,26"};

cube[0]=cube0; cube[1]=cube1; cube[2]=2;
printf("%d" ,cube[1][1][1],cube);
}
なにとぞお願いします。




この投稿にコメントする

削除パスワード

No.24566

Re:ポインタ
投稿者---REE(2005/12/06 10:47:42)


>自分でやってみて成功はしたんですけど、画面に出力されません。どこがおかしいでしょうか?

コンパイルも通らないのに、成功したのですか?



この投稿にコメントする

削除パスワード

No.24567

Re:ポインタ
投稿者---わたり(2005/12/06 11:18:26)
http://study-with.sub.jp/


>自分でやってみて成功はしたんですけど、画面に出力されません。どこがおかしいでしょうか?

まず自分でやってコンパイルしましたか?
エラーが出ますけど。。。

>    **cube[3][3],
>      cube0[3][3]={"0,1,2,3,4,5,6,7,8"},
>      cube1[3][3]={"9,10,11,12,13,14,15,16,17"},
>      cube2[3][3]={"18,19,20,21,22,23,24,25,26"};


まず、cube, cube0, cube1, cube2の型指定をしてください。
あと、「""」(ダブルクォーテーション?)でくくると
きちんと実行されるのでしょうか。。

> cube[0]=cube0; cube[1]=cube1; cube[2]=2;
cubeは一次元配列で宣言するべきではないでしょうか?



この投稿にコメントする

削除パスワード

No.24569

Re:ポインタ
投稿者---kimi(2005/12/06 12:21:24)


エラーでました。なんか調子悪かったみたいです。
>まず、cube, cube0, cube1, cube2の型指定をしてください。
>あと、「""」(ダブルクォーテーション?)でくくると
>きちんと実行されるのでしょうか。。
> intで型指定すればいいでしょうか?あと、””でくくる必要はないんでしょうか?
>> cube[0]=cube0; cube[1]=cube1; cube[2]=2;
>cubeは一次元配列で宣言するべきではないでしょうか?
>どのように一次元配列すればいいのでしょうか?初心者の者でよくわかりません。




この投稿にコメントする

削除パスワード

No.24575

Re:ポインタ
投稿者---とろり(2005/12/06 13:40:04)


> ポインタ配列を用いて三次元配列cube[3][3][3]を作って、要素順に{1〜26}のデータを代入し、cube[1][1][1]の値を出力したいんですけど

要件は「cube[1][1][1]の値 "14" を出力する」でよろしいですか?

> 要素順に{1〜26}のデータを代入
int cube[3][3][3] = {{{1,2,3},{4,5,6},{7,8,9}},{{10,11,12},{13,14,15},{16,17,18}},{{19,20,21},{22,23,24},{25,26}}};

> cube[1][1][1]の値を出力
printf("%d\n", cube[1][1][1]);


この投稿にコメントする

削除パスワード

No.24581

Re:ポインタ
投稿者---まきじ(2005/12/06 23:29:16)


>エラーでました。なんか調子悪かったみたいです。

って、いつコンパイルしても結果は同じはずです。

>**cube[3][3];

は int **cube[3][3]; だとすると cube の各要素は
int 型へのポインタへのポインタですよ。


この投稿にコメントする

削除パスワード

No.24573

Re:ポインタ
投稿者---shu(2005/12/06 13:31:51)


配列について良く理解していない。
ポインタについて良く理解していない。
良く理解していないまま、何次元もの配列やポインタを使おうとしている。

回答する側にプログラムの目的が伝わっていない。
わかっている人は自分でプログラムが組めるので、
わかっていない人の間違ったプログラムより、
「問題やプログラムの目的」の方が参考になる。
わかっていない人の間違ったプログラムは、直せないし直さない。

只動くプログラムではなくて、問題解決に向かって動いてくれるようなプログラムを書く。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧