C言語関係掲示板

過去ログ

No.469.二次元配列ポインタを関数に渡す方法

[戻る] [ホームページ]
No.3392

二次元配列ポインタを関数に渡す方法
投稿者---サトシ(2002/11/09 22:15:30)


初めまして、こんばんわ。
メイン関数で定義した二次元配列のポインタをユーザ関数に渡して、その配列内の値を書き換えるということをしたいのですが、うまくできません。
よろしければ、少しお付き合いください!(>_<)

まず、二次元配列の前に普通の配列の中身を書き換えるプログラムを作ってみました。

------------------<プログラム1>-------------------------
#include<stdio.h>

#define SIZE 5

/* 配列に数値を入れる関数 */
int Format(int *pTable);

main()
{
    int arrTable[SIZE];    /* 配列定義 */
    int cnt = 0;           /* カウンタ変数 */
    
    /* 配列のポインタを渡して、各要素に数値を入れる */
    Format(arrTable);
    
    /* 結果表示 */
    while(cnt < SIZE)
    {
        printf("%d",arrTable[cnt]);
        cnt++;
    }
    
    return 0;
}

int Format(int *pTable)
{
    int cntUp = 0;    /* カウンタ変数 */
    
    /* 配列に数値を格納 */
    while(cntUp < SIZE)
    {
        pTable[cntUp] = cntUp;
        cntUp++;
    }
    
    return 0;
}

----------------------------------------------------------

上記プログラムを実行すると

01234

という期待通りの結果が得られました。
そこで二次元配列でも同じように下記のようなプログラムを作成しました。

------------------<プログラム2>-------------------------
#include<stdio.h>

#define SIZE 5

/* 配列に数値を入れる関数 */
int Format(int *pTable);

main()
{
    int arrTable[SIZE][SIZE];    /* 二次元配列定義 */
    int cntX = 0;
    int cntY = 0;
    
    /* 配列のポインタを渡して、各要素に数値を入れる */
    Format(arrTable);
    
    /* 結果表示 */
    while(cntY < SIZE)
    {
        while(cntX < SIZE)
        {
            printf("%d",arrTable[cntY][cntX]);
            cntX++;
        }
        printf("\n");
        
        cntX = 0;
        cntY++;
    }
    
    return 0;
}

int Format(int *pTable)
{
    int cntX = 0;
    int cntY = 0;
    int cntUp = 0;
    
    /* 二次元配列に数値を格納 */
    while(cntY < SIZE)
    {
        while(cntX < SIZE)
        {
            pTable[cntY][cntX] = cntUp;
            cntUp++;
            cntX++;
        }
        cntX = 0;
        cntY++;
    }
    
    return 0;
}

----------------------------------------------------------

これを実行しようとするとコンパイルの時点でエラーが起こってしまいます。
期待した動作では

01234
56789
1011121314
1516171819
2021222324

のような動作をするプログラムを作りたいのですが、二次元配列をユーザ関数に渡して、配列内要素を書き換える場合はどのようにしたらよいのでしょうか?

よろしくお願いしますm(__)m


No.3397

Re:二次元配列ポインタを関数に渡す方法
投稿者---かずま(2002/11/10 13:37:02)


> メイン関数で定義した二次元配列のポインタをユーザ関数に渡して、
> その配列内の値を書き換えるということをしたいのですが、うまくできません。

int Format(int *pTable); は、間違いです。
int Format(int (*pTable)[SIZE]); または
int Format(int pTable[][SIZE]); と書き換えましょう。
int Format(int pTable[SIZE][SIZE]); と書いてもかまいません。

一次元配列の場合は、
int Format(int *pTable); ですが、これも
int Format(int pTable[]); と書けますし、
int Format(int pTable[SIZE]); と書いてもかまいません。


ここのホームページの第11章 11-2 の補足を読んでみてください。

No.3401

Re:二次元配列ポインタを関数に渡す方法
投稿者---サトシ(2002/11/10 23:19:06)


かずまさん、早速のご返答ありがとうございます!
早速試してみようと思います(>_<)

No.3430

ありがとうございました!
投稿者---サトシ(2002/11/12 16:01:19)


上手く出来ました!
本当にありがとうございました!m(__)m