1
struct a{
  double array[2][3];
};

struct b{
  double array[3][4];
};

void main(){
  a x = {{1,2,3,4,5,6}};
  b y = {{1,2,3,4,5,6,7,8,9,10,11,12}};
}

2 つの構造体があり、その中にサイズの異なる 2 つの次元配列があります。xy(毎回 1 つ) の両方を処理できる関数を 1 つだけ定義したい場合、つまり、関数は と の両方x.arrayy.arrayその引数にすることができます。入力引数を定義するにはどうすればよいですか? 私はポインターを使うべきだと思います....しかし、**x.arrayうまくいかないようです。

たとえばPrintArray、入力配列を出力できる関数を書きたいとします。

void PrintArray(  ){} 

括弧内には何を入力すればよいですか?double **私にはうまくいかないようです...(次元をPrintArrayの引数にすることもでき、2 * 3配列に伝えます)

4

1 に答える 1

0

ポインター、行数、列数の 3 つのパラメーターを受け取る関数を作成します。関数を呼び出すときは、配列をポインターに減らします。

void PrintArray(const double *a, int rows, int cols) {
    int r, c;
    for (r = 0;  r < rows;  ++r) {
        for (c = 0;  c < cols;  ++c) {
            printf("%3.1f ", a[r * cols + c]);
        }
        printf("\n");
    }
}

int main(){
    struct a x = {{{1,2,3},{4,5,6}}};
    struct b y = {{{1,2,3,4},{5,6,7,8},{9,10,11,12}}};
    PrintArray(&x.array[0][0], 2, 3);
    PrintArray(&y.array[0][0], 3, 4);
    return 0;
}
于 2013-11-14T05:47:28.280 に答える