C言語関係掲示板

過去ログ

No.562.要素数のわからない2次元配列を関数に渡す

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

配列の受け渡しについて
投稿者---ろくすけ(2003/02/08 22:13:17)


ものすごく初歩的な事のようで申し訳ないのですが…2次元以上の配列を
関数にうまく渡せません。(1次元だと出来るのですが)

 #include<stdio.h>
void test(double a[][]);
main(){
double a[3][4];
  …
test(a);
   … 
return(0);
}

void test(double a[][]){
    …
return;
}

配列の渡し方ってこうじゃなかったでしたっけ… アドバイスお願いします。

No.5096

Re:配列の受け渡しについて
投稿者---a(2003/02/08 23:28:47)


>void test(double a[][]);
test(double a[][4]);

No.5104

ありがとうございます
投稿者---ろくすけ(2003/02/09 14:45:32)


ありがとうございます。でもそれだと、配列のサイズがあらかじめ分かっていないとき(mallocで宣言したとき等)に使えないですよね…何か方法は無いのでしょうか。

No.5107

Re:ありがとうございます
投稿者---かずま(2003/02/09 17:30:19)


> でもそれだと、配列のサイズがあらかじめ分かっていないとき(mallocで
> 宣言したとき等)に使えないですよね…何か方法は無いのでしょうか。

配列の先頭アドレスを引数として渡してもらった関数において、
その配列の要素数はわかりません。1次元だって同じです。
要素数もいっしょに渡しましょう。
#include <stdio.h>

void test(void *a, int n, int m)
{
    int i, j;
    double *p = a;
    #define A(i, j)  p[(i)*m + (j)]

    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++)
            printf("%8g", A(i, j));
        printf("\n");
    }
    #undef A
}

int main(void)
{
    double a[3][4] = {
        11, 12, 13, 14,
        21, 22, 23, 24,
        31, 32, 33, 34,
    };
    double b[2][3] = {
        101, 102, 103,
        201, 202, 203,
    };

    test(a, 3, 4);
    puts("---");
    test(b, 2, 3);
    return 0;
}