K.Maebashi's BBS

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

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

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

[2281] C言語ポインタ完全制覇、記述に関する愚痴(^^;
投稿者:かずちゃん
2022/05/07 17:58:42

新・標準プログラマーズライブラリ「C言語ポインタ完全制覇」(2017年12月21日初版第1刷発行)について、少々愚痴をば… 「3-3-3配列→ポインタの読み替え」のp.192の下部には「そして、配列がポインタに読み替えられたとき、そのポインタは左辺値ではありません。」と記述されていて、次のページに続いて char str[10]; str = "abc"; に対して、「代入の左辺のstrはもともと配列であり、四季の中ではポインタに読み替えられますが、左辺値ではありませんから、…」と記されています。 これって、これまでの僕の間違った理解では「strと書くことによって、str[0]の(1文字分を記録できる)アドレスが渡り、そこにリテラルで3文字も(ヌルを入れると4文字)押し込もうとしているから駄目なんだよな?」と思っていたのですが、その理解は完全に間違っていて… p.71には「…式の中では、配列はその要素へのポインタに読み替えられるのです。」とあります。これって、"ポインタ"とは書かれていますが(そして上のp.193の記述でも「ポインタに読み替えられ」とありますが)これらって、全て、p.43に『…厄介なことに、世間では「ポインタ型」も「ポインタ型の変数」も「ポインタ型の値」も、単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください。』と言っているところの、「ポインタ型の値」のことですよね? だから「左辺値ではありません」のですよね? せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?) という愚痴(雑談)でした…
[この投稿を含むスレッドを表示] [この投稿を削除]
[2282] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
投稿者:かずちゃん
2022/05/07 21:56:13

あ、勿論、「四季」→「式」です。 >新・標準プログラマーズライブラリ「C言語ポインタ完全制覇」(2017年12月21日初版第1刷発行)について、少々愚痴をば… > >「3-3-3配列→ポインタの読み替え」のp.192の下部には「そして、配列がポインタに読み替えられたとき、そのポインタは左辺値ではありません。」と記述されていて、次のページに続いて > >char str[10]; >str = "abc"; > >に対して、「代入の左辺のstrはもともと配列であり、四季の中ではポインタに読み替えられますが、左辺値ではありませんから、…」と記されています。 > >これって、これまでの僕の間違った理解では「strと書くことによって、str[0]の(1文字分を記録できる)アドレスが渡り、そこにリテラルで3文字も(ヌルを入れると4文字)押し込もうとしているから駄目なんだよな?」と思っていたのですが、その理解は完全に間違っていて… > >p.71には「…式の中では、配列はその要素へのポインタに読み替えられるのです。」とあります。これって、"ポインタ"とは書かれていますが(そして上のp.193の記述でも「ポインタに読み替えられ」とありますが)これらって、全て、p.43に『…厄介なことに、世間では「ポインタ型」も「ポインタ型の変数」も「ポインタ型の値」も、単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください。』と言っているところの、「ポインタ型の値」のことですよね? >だから「左辺値ではありません」のですよね? > >せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?) > >という愚痴(雑談)でした…
[この投稿を含むスレッドを表示] [この投稿を削除]
[2284] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
投稿者:(ぱ)こと管理人
2022/05/08 00:43:54

ご意見ありがとうございます。 >p.71には「…式の中では、配列はその要素へのポインタに読み替えられるのです。」と >あります。これって、"ポインタ"とは書かれていますが(そして上のp.193の記述でも >「ポインタに読み替えられ」とありますが)これらって、全て、p.43に『…厄介なことに、 >世間では「ポインタ型」も「ポインタ型の変数」も「ポインタ型の値」も、単に >「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください。』 >と言っているところの、「ポインタ型の値」のことですよね? >だから「左辺値ではありません」のですよね? その通りです。 >せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と >注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉 >書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?) 『混同しないように気をつけてください』のところについては、実は本書の、 「新・標準プログラマーズライブラリ」になる前の旧版では、注に 「※せめて本書の中では、区別して表記しようかと思ったのですが、どう書いても自然な いい回しにならないので断念しました…… すみません」と書いてありました。 (あれ? 新版では削ったんだっけ?) というわけで、ここは著者としても忸怩たるところではあります。 >これまでの僕の間違った理解では「strと書くことによって、str[0]の(1文字分を記録できる)アドレスが >渡り、そこにリテラルで3文字も(ヌルを入れると4文字)押し込もうとしているから駄目なんだよな?」と >思っていたのですが、その理解は完全に間違っていて… この「間違った理解」は、strを「ポインタ型の変数」と間違って解釈した、ということであれば、 クドく書き下すべきだったんですかねえ。 ただ、strが「ポインタ型の変数」と解釈したとするとそれは「str[0]の(1文字分を記録できる)アドレス」 とも違うのでは、とは思いますが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2285] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
投稿者:かずちゃん
2022/05/08 11:10:24

ご返信ありがとうございます。 >>と言っているところの、「ポインタ型の値」のことですよね? >>だから「左辺値ではありません」のですよね? > >その通りです。 ありがとうございます。スッキリしました。 今後も、コード・フラグメントと睨めっこしながら、「3つのうちのどれだ?」と考えるようにします。 >>せめて、『単に「ポインタ」と呼んでしまうことが多いので、混同しないように気をつけてください』と >>注意を喚起しているこの本では、随所の「ポインタ」という記述を、混同しにくいように〈クドく〉 >>書き下して書いておいて頂けると有り難かったです。(文字数が増えるのを防ぐなら、「アドレス」とか?) > >『混同しないように気をつけてください』のところについては、実は本書の、 >「新・標準プログラマーズライブラリ」になる前の旧版では、注に >「※せめて本書の中では、区別して表記しようかと思ったのですが、どう書いても自然な >いい回しにならないので断念しました…… すみません」と書いてありました。 >(あれ? 新版では削ったんだっけ?) >というわけで、ここは著者としても忸怩たるところではあります。 をを、確かに、旧版のp.032に(2016年9月15日初版第18刷発行)、その旨書かれていますね。 (旧版、途中でなにか他のことに興味が移ったのか、3-4辺りで読むのが止まってしまっていたようですが…) どう書いたら自然な言い回しと(お感じに)なりますかね? 僕は、今回新板を初めから読み直して、あらためて、この『単に「ポインタ」と呼んでしまう』中身をキチンと区別することが正確な理解に繋がるように思えたのですが。(例えば、新板のp.43に『混同しないように…』と記した直後のp.46の中程では(この場合の「ポインタ」は「ポインタ型の変数」のことですね)と書いて下さっています) 「ポインタ型」、「ポインタ型の変数」等と明示して頂けると、かなり理解のスピードが早まると思います。 Kenneth A. Reek の"Pointers on C"とかではどう表現されているのか読み直してみようかしらん… (実は、暫く触っていなかったC++の勉強を(Lippmanの本で)し直しているうちに、constがまたまたわからなくなって、ご著書を読み返しておりまして… 基礎がしっかりできていないと、結局基礎的なところに戻って理解し直す、ということの繰り返しです… あ、ワタシは、定年もそう遠くないジジイの自称物理屋で、シミュレーション用のツール・キットを使うためにこういう言語を学んでおります。今頃このレベルってのがナニですが…)
[この投稿を含むスレッドを表示] [この投稿を削除]
[2287] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
投稿者:(ぱ)こと管理人
2022/05/09 23:10:42

>どう書いたら自然な言い回しと(お感じに)なりますかね? 僕は、今回新板を初めから >読み直して、あらためて、この『単に「ポインタ」と呼んでしまう』中身をキチンと >区別することが正確な理解に繋がるように思えたのですが。(例えば、新板のp.43に >『混同しないように…』と記した直後のp.46の中程では(この場合の「ポインタ」は >「ポインタ型の変数」のことですね)と書いて下さっています) 初版執筆当時、『どう書いても自然な>いい回しにならないので断念』して、 当時の編集さんにも「それは残念ですね」というようなことを言われた記憶があるのですが、 確かにp.71の「…式の中では、配列はその先頭要素へのポインタに読み替えられるのです。」は 「…式の中では、配列はその先頭要素へのポインタ(ポインタ値)に読み替えられるのです。」と 書いてもそんなには違和感はなかったように思いますね。 当時主に気にしていたのは、「ポインタ型」と、「ポインタ型の変数または値」の 区別だったように思いますが…… >Kenneth A. Reek の"Pointers on C"とかではどう表現されているのか読み直してみようかしらん… これは私は読んでいないので、何か面白いことが書いてあったら教えてください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2288] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
投稿者:かずちゃん
2022/05/10 05:16:53

>>Kenneth A. Reek の"Pointers on C"とかではどう表現されているのか読み直してみようかしらん… > >これは私は読んでいないので、何か面白いことが書いてあったら教えてください。 ちなみに、手元のK&Rの第2版日本語訳(共立出版、1992年10月10日初版121刷、年齢がバレる?前橋さんより4年年上のようです)を開いてみたら、p.35(1.8 引数)の上部に、 『配列の名前が引数として使われるときは、関数に渡される値は、実際には配列の先頭番地すなわちアドレスである。配列の要素のコピーは行われない。』 と、「C言語ポインタ完全制覇」を読んだあとである今読むと素直にピピッと理解でき曖昧さも少ない表現がされていました… その他、英語で書かれたCの本で、(英語での)Cの変数の宣言の読み解き方が、「C言語ポインタ完全制覇」同様にわかりやすく書かれた本があったと記憶していた(それが上記Reekの本だと思っていた)のですが、「ポインタ」含め、いまいち、"あぁ、これだこれだ"という箇所がなく… Reek氏の本は、もう一度ひっくり返してみます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2290] Re:C言語ポインタ完全制覇、記述に関する愚痴(^^;
投稿者:(ぱ)こと管理人
2022/05/12 01:08:24

>ちなみに、手元のK&Rの第2版日本語訳(共立出版、1992年10月10日初版121刷、 >年齢がバレる?前橋さんより4年年上のようです)を開いてみたら、p.35(1.8 引数)の上部に、 >『配列の名前が引数として使われるときは、関数に渡される値は、実際には配列の先頭番地 >すなわちアドレスである。配列の要素のコピーは行われない。』 これはまったくその通りなのですが、『配列の名前が引数として使われるときは』という 限定は本当は不要なんですよね。もちろんここでそれを書く必要もないので、この説明が 悪いというわけではないのですが。
[この投稿を含むスレッドを表示] [この投稿を削除]