K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>> 初めまして、九龍と申します。 >> C言語でのプログラム経験は結構長いのですが、ある事が分からなかったので、 >> C言語ポインタ完全制覇に購入させて頂きました。 > >はじめまして。お買い上げいただきありがとうございます。 > >> それで、現在読んでいる真っ最中なのですが、p303ページに記載されている >>「fは勝手にdoubleに読み替えられているので,当然正しく渡らないことになります.」 >> の意味が分かりません。 >> 上記は、仮引数float fは、double fと読み替えられているため、fのポインタを >>渡しても、void sub_func 関数では、floatへのポインタで間接参照されるため、 >>正常に参照されないということでよろしいのでしょうか? > >そうです…と答えると一言で終わってしまうわけですが、何か疑問があるので >質問されたのだと思います。そこをもう少し明確にしていただけると、何か回答 >できるかもしれません。 >たとえばfloat 4バイト、double 8バイトの処理系を仮定したとして、fは実は >doubleなので 8バイトです。その領域をfloat *で読めるはずはないわけです。 > >> 後、もし宜しければexternとリンケージに関する事も教えて頂ければと思います。 >> p80の脚注にも出てきているので、ちょっとインターネットで調べてみたのですが >>(http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide82-1.html)、見た瞬間に >>定義宣言と参照宣言、関数プロトタイプ宣言がごっちゃになりました。 > >そのページにあるように、外部結合とは、 >| プログラムが複数のソースファイルから構成される場合,それらすべての >| ソースファイルにおいて同一のオブジェクト,或いは関数として参照。 > >ですよね? それに対し内部結合はそのソースファイルの中だけで有効なリンケージです。 >関数や変数を内部結合にするためにはstaticを付けますが、 >外部結合の場合、定義では何もつけず、宣言ではexternを付ける…と決まっていれば >説明が楽なのですが、実際には、 > >・どこかで定義されている変数を参照する場合、externを付けなくても、たいていの > 処理系では何のエラーにもならない(p.317を参照) >・どこかで定義されている関数を使う場合、プロトタイプ宣言を行うが、 > これにはexternをつけても付けなくても良い(で、たぶん普通はつけない) > >ということで、説明がややこしくなっています。 > >> (なにせ今まで、どこかで定義宣言をしている変数を参照する場合には、 >> externを付ければ良いぐらいにしか思ってなかったんで。) > >この認識で正しいと思います。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!