K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2216] C:言語ポインタ完全制覇(第2版) Fig2-8
投稿者:Hiroyuki Naito
2020/01/20 21:05:36

お世話になります。 だいぶ前にpdf版を購入してからしばらくコンピュータの中で眠らせてしまって いましたが、一念発起して読み始めております。 さて、Fig2-8では、アセンブラが割り振るベースポインタとそこに格納される変数の 関係が示されています。 ベースポインタ-24、-28と「仮引数a,b」の位置関係が正しいとすると、ベース ポインタとベースポインタ-4に格納される「退避したベースポインタ」とローカル 変数:resultの位置は、-4バイトずれていないでしょうか。 ベースポインタ:-20とベースポインタ:-4の間に、12バイト分のスペースしかない のも少し気になりました。 以上、お手数ですがご回答をお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2217] Re:C:言語ポインタ完全制覇(第2版) Fig2-8
投稿者:(ぱ)こと管理人
2020/01/22 00:56:40

はじめまして。ご指摘ありがとうございます。 >ベースポインタ-24、-28と「仮引数a,b」の位置関係が正しいとすると、ベース >ポインタとベースポインタ-4に格納される「退避したベースポインタ」とローカル >変数:resultの位置は、-4バイトずれていないでしょうか。 > >ベースポインタ:-20とベースポインタ:-4の間に、12バイト分のスペースしかない >のも少し気になりました。 申し訳ありません。誤植です。 言い訳になりますが、私が編集さんに渡したFig2-8の原本は以下です。 http://kmaebashi.com/etc/basepointer.png これをデザイナさんが書き直した際に、 ①「ローカル変数result」と「退避したベースポインタ」を書く場所を1段間違え、 ②「ベースポインタ」の右の矢印「→」をつけ忘れる というミスをされたようです。 もちろんゲラをチェックするのは私の仕事ですので、見落として本になって しまったのは私の責任です。 元の図も、「退避したベースポインタ」が4バイトに見える、というのは ちょっと問題ですね…… 正誤表に上げさせていただきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2218] Re:C言語ポインタ完全制覇(第2版) Fig2-8
投稿者:Hiroyuki Naito
2020/01/24 17:39:26

ご回答ありがとうございました。 >①「ローカル変数result」と「退避したベースポインタ」を書く場所を1段間違え、 >②「ベースポインタ」の右の矢印「→」をつけ忘れる onlineGDBというWeb上のCコンパイラで、コンパイルオプションをいろいろ試してist2-6と同じアセンブルリストが得られたので、本文に沿ってリストを追いかけてみて気づいた疑問点でした。 2.5.3までのところで、目からうろこ状態になってしまったのは以下の通りですが、今後もいろいろな発見がありそうなので期待しながら読み進めていきたいと思います。 (1)宣言のときの*や[](区切り子) は、式の中に現れる演算子の*や[]とは、まったくの別物。 (2)式の中では、配列は「その先頭要素へのポインタ」に読み替えられる。 (3)関数は、式の中では「関数へのポインタ」に読み替えらえる。 (4)関数funcへのポインタを格納するポインタ変数は、以下のように宣言する。 int (*func)(double); (5)関数へのポインタを使用したサンプルプログラム:List2-3 (6)自動変数の領域は、関数を抜けたら解放される。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2219] Re:C言語ポインタ完全制覇(第2版) Fig2-8
投稿者:(ぱ)こと管理人
2020/01/25 00:22:40

正誤表に追加しました。ミスが多く申し訳ありません。 >onlineGDBというWeb上のCコンパイラで、コンパイルオプションをいろいろ試して >ist2-6と同じアセンブルリストが得られたので、本文に沿ってリストを追いかけてみて >気づいた疑問点でした。 おかげで他の方が混乱するのが避けられたと思います(正誤表を見に来た方に限りますが…)。 ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]