構造体の触り

えと、大量にある変数を関数に渡すのにダラダラ引数書き連ねるのは美しくないので構造体を使おうと思ったのでした。だって、変数UとPとUxとPxとかいうdouble型の1次元配列を、関数Funcに渡して微分さすには、

void Func (double *U, double *Ux, double *P, double *Px, double dx) {
  int i;

  for (i = 1; i < LL-1; i++) {
    Ux [i] = 0.5*(U[i+1] - U[i-1])/dx;
    Px [i] = 0.5*(P[i+1] - P[i-1])/dx;
}

とかしないといけない訳で、これは鬱陶しいし、コードのメンテナンスが大変なので、

struct Vars {
  double U [LL];
  double P [LL];
}

int main () {
  struct Vars Q;
  struct Vars Qx;

  dQdx (Q, Qx, dx, LL)

  return 0;
}

void dQdx (struct Vars *Q, struct Vars *Qx, double dx, int LL) {
  int i;

  for (i = 0; i < LL; i++) {
    Qx -> U [i] = 0.5*(Q -> U [i+1] - Q -> U [i-1])/dx;
    Qx -> P [i] = 0.5*(Q -> P [i+1] - Q -> P [i-1])/dx;
}

とかしようとしたけど、gccコンパイルしたら、mainの中の関数dQdxに適合しない変数を入れてるよとかいってコンパイルするのを拒否されます。意味が分からないです。別にこれで悪い訳ではないと思うんだが、どうなんだろう。
仮引数は参照渡しにしてmein文の中で先頭アドレスを渡している筈。意味が分からないです。明日考えるかなあ。しかし関数に渡せないと旨味が出ないです。
そしてなんとなくFortranっぽい書き方が嫌になります。でも関数ポインタとか意味が分からないので取り敢えずスルーしておきます。プログラミングは奥が深いですね。あー眠い。