<

![endif]-->

fc2ブログ

「NULL」と「0」と「'\0'」と「""」

スーツをクリーニングに出そうとして、昨日ABUSを駐輪場に置き忘れてきたことに気づいて取りに行く。ついでに足を伸ばす。


暖を運んだ昨晩の強風、
梅の花びらももうくたびれ気味かな。













葉っぱのコロニーの数、
この木何の木ビッグカンパニーの木。











フロントブレーキはますます当たりがついて、
ぎゅいーっと効くようになった。このシューで十分。















(シューカセットの向き前後逆)→




リアはやっぱりそれなり。
高速から両手でブレーキングするときは、左右の握力を気にしなくていいので操作はしやすい。








日比谷公園でルーパ・ロマーナを見つけた。昭和13年、イタリア大使館から送られたもの。
ローマの地に町を作った集団のリーダーだったとされる二人は、生まれてすぐテベレ川に捨てられて狼に拾われ、狼の乳を飲んで育ったという伝承がある。
これは、ローマが誰かの家系や財産を引き継いで始まったのではなく、ゼロの起源からのものだったことを表している。

後ろ盾となるものを何も持たない彼らは、エトルリアなどの隣接するより強大な街を吸収するのではなく、同化してしまうことで大きくなっていった。昨日剣で突き合った敵が今日はおらが村のお隣さんになっているという具合で、それが発展した共和制はギリシャの非市民を締め出した直接民主制とも異なり、これによってこそローマ文明の繁栄がもたらされたのだ。というのは塩野七生さんの受け売り。
ゼロから何かを生み出すのは歴史や伝統に胸を張るよりも格好いいことであり、一見野蛮に見えるこの像は、逆にそれだけローマ人の誇りを示しているというわけである。
たとえば、主婦が買い物に使う自転車にエンジンをつけて始まったというホンダスピリットが、ハイブリッド車のインサイトにあの値段をつけさせたのであり、それはホンダの中の人の誇りの表れでもあるのだろう。
これに対するトヨタのプリウスは、プライドだけでは商売はできにゃあと、新型は発売するけど旧型もプライスダウンで販売し続るという戦略で、ホンダの副社長?だかの人は「理解できない」といったとか何とか。このガチンコ勝負もまたおもしろい。


char16.png



『危険なプログラムの処方箋』より。
aのサイズは16byteだが、
関数への引数として渡されると、
romanaの引数にchar i[16]と書いているにもかかわらず、そのiのサイズは4byte。

Cは実効速度を優先するので、配列の引数はコンパイラが勝手にポインタとして処理しますという説明以外に納得できる理由があるなら知りたい。
ないなら、C言語コーランの教えがそうなっているので信じますとしか言えん。






あとこれ
char gStr[128];

void f1(){ strcpy(gStr, NULL); }
void f2(){ strcpy(gStr, 0 ); }
void f3(){ strcpy(gStr, '\0'); }
void f4(){ strcpy(gStr, "" ); }
コンパイラが唯一通すf4()だけ、0番地のNULL領域を使用せず、gStrに'\0'がセットされるというわけらしい。別の本では、128byteの残りの領域も'\0'埋めされるともある。

p90の説明を引用しておくと、
簡単にいえば
「NULLは無効なポインタ」
「数値のゼロは単なるゼロ」
「'\0'は文字列の文末コード(数値だと単なるゼロ)」
「""は空っぽな文字列」
という解釈になるでしょう。実際に機械語に落とされた結果を眺めると一発で分かるのですが、NULLにしても0にしても'\0'にしても「ゼロという値」がstrcpy関数の2つめの引数にセットされます。
JavaScriptのnullとundefinedと0は迷わなくなったけど、これは意味分かりません。これもコーランの教えでつか。




comment

Secret

No title

はじめまして、知らない方に不躾で失礼とは思いますが、
いてもたってもいられなくなりまして書き込みます
疑問の件はc-faqを参照してくださいませ。

配列の件
http://www.kouno.jp/home/c_faq/c6.html#21
仮引数の"16"はおそらく無視されます。

Null文字とNullポインタの違いについて
http://www.kouno.jp/home/c_faq/c5.html#0

ポインタとほかのいろいろなもの(配列、構造体、関数)の
関係をクリアすれば、Cは理解できたと思っていいと思います。
がんばってください。

Re: No title

ありがとうございます。c-faqの説明をみると、読めば理解できても、納得して使えるかというとやはり何か気持ちがひっかかってしまいます。自然言語のように言外の意図が隠れているような…。
苦い薬だと思ってこうした説明を飲み込んでいかないといけないのでしょうか。

No title

こんばんは、昨晩書き込んだものです。
雑誌の附録に載るようなソフトを
書いてる方だとはつゆ知らずに、
えらそーなことを書いてすみません。
釈迦に説法ですね。

パラメータの配列がポインタになる件については、
メモリが少ない時代にできた言語ですし、
言語が単純なために値渡ししかないし、
当時は、でかい配列を値渡ししてスタックに積むのは
いやだったのかもしれませんね。

当たってるかどうかわかりませんが、違和感がある
別の理由は最近の言語とC(よく知らないけど多分C++も)の
考えかたの違いでしょうか。
最近の言語は、プログラマは業務ロジックに集中すべきなので
あって、アドレスだとかを意識するようなことは
処理系に任せよう。という考え方なのに対して、
CやC++は、コンピュータに何をやらせるか
プログラマが明確に意識して指示しなければならない。
という立場なのです。

また釈迦に説法ですね。失礼しました。

Re: No title

伊勢松さんありがとうございます。釈迦に説法なんていわないでください。

Cは何をするにも使うメモリの桁数や開放を意識しなければならず、
ポインタひとつ間違えるだけであぼんして悶々とデバッグですね。
このレベルのスキルがまずないと、プログラムが動き始めて楽しくなってくるころにはもう疲れています。ちゃんと理解して書き始めるところから楽しくなれるまでの道のりは簡単ではないですね。
メモリが無尽蔵に使えるなら不要なことだろうけど、一方でスクリプト言語では、どうモダンな記述で実現したかという話以前に、そのメモリの使われ方をCのように考えることはできません。

僕も釈迦に説法でした。

Campy

フロントのシューが左右反対ですよ。
これだとパッドが抜けるかも

あ"っー!

たしかに反対でした(笑
今に至るまで気づかなかったことに超へこみ、
この写真が今後もずっと恥をらさし続けていくことを思うと・・・
while(aho.atEndofStream)

笹部 政宏
笹部 政宏
mail




フリーソフツ
Category
はてブ
Monthly Archive
New Entry
New Comment
New Trackback
RSS
Copyright © Kittens flewby me All Rights Reserved.