• ベストアンサー

ポインタ、関数、アドレス・・・

はじめまして。 今微分方程式を解かせるプログラムを作る上で、関数に配列を渡したいと考えています。(多変数微分方程式なので) そのため、ポインタを学び、何となくそれについて分かってきたつもりなんですが、いざ試しのプログラムで、コンピュータがちゃんと値を返してくれるかを試しているのですが、どーもうまく値を返してくれません。。。 下に僕が作ったプログラムを載せますので、問題点を指摘してもらえたらうれしいです。 このプログラムで、僕として返してもらいたい値は1.1111です。 よろしくお願いします /******ソースプログラム******/ #include<stdio.h> #include<math.h> double f(int *x); void main() { double x[5]; x[0] = 0.0; x[1] = 1.0; x[2] = 2.0; x[3] = 3.0; x[4] = 4.0; printf("%f \n", f(x)); (←ここらへんがおかしいと言われます。。。) } double f(int *x) { int i; double z=0.0; for(i=0 ; i<=4 ; i++) { z += pow(0.1,*(x+i)); } return(z); }

質問者が選んだベストアンサー

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

double *x; のdoubleはアドレスの形式ではなく、ポインタが指すアドレスに入る値の型です。

neuro-scientist
質問者

お礼

ありがとうございました おかげで、大分ポインタについての理解が進みました。これでポインタを大いに活用したプログラムが作れそうです!

その他の回答 (1)

  • MASA_H
  • ベストアンサー率42% (64/151)
回答No.1

まず double f(int *x) でなく double f(double *x) とすべきです。 あとコンパイラ依存かもしれませんが、mainにはintの返り値を持たせて正常終了したならそれを知らせてやらないとこれもまた警告されます。

neuro-scientist
質問者

お礼

ご指摘ありがとうございました。 おかげでポインタを用いたプログラムが作れそうです

neuro-scientist
質問者

補足

ありがとうございます。 直して実行させてみたところ、欲しい値を出力できました! ですが、疑問が・・・。なぜ、intではなく、doubleにする必要があるのですか?アドレスは必ずしもint型であるとは限らないということでしょうか?? これは確認なのですが、f(double *x)とすることで、x[0]のアドレスを渡している、ということでよろしいでしょうか? 重ね重ね申し訳ございません よろしくお願いします