このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

沖林式自動アロケーション付きポインタ変数

ほんとにどうでもいいことですが、いま世間で話題の、そして僕も昨日言及した「C/C++のポインタの機能--変数の場所(アドレス)」、修正されていない2ページ目(いずれ修正されちゃうかも)をたんねんに読んでみました(修正済み1ページ目は面白くない)。すると、著者・沖林さんのポインタに対する認識がうっすらとわかってきました。それを書こうかと思ったのだけど、やめます。

編集者の修正記録(差分)から逆向きにパッチすると変更前の1ページ目がほぼわかります。それにより、

  • 「一般変数」と「ポインタ変数」は機構的にまったく別物。
  • ポインタ変数の名称の先頭には「*」がつけられる。
  • ポインタ変数は宣言と同時に値格納用の領域も確保される。

なんて書いてあったことも判明します。([追記]Web魚拓 http://s03.megalodon.jp/2008-0328-1911-56/builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm と、当該記事のコメント#3からオリジナル記事を再現できます。[/追記]

実は上記のような内容(つまり、沖林さんの誤解)を、2ページ目を読んで推測したのですが、推測が事実だったので、あえて書く必要もなくなっちゃったよ。

あー、そうそう、見出しの「沖林式自動アロケーション付きポインタ変数」とは、例えば:


#include
int main( void )
{
int *n;
scanf( "%d", n ); /* *nの値をキーボードなどから入力(Enterで終了) */
printf( "%d\n", *n ); /* nの値を出力 */
return 0;
}
このn(いやっ、沖林流では変数「*n」)のこと。沖林さんの意図(希望的誤解)を書き下せば、次のようでしょう(気持ち悪いのでnをpにした)。

#include
#include
int main( void )
{
int *p = (int *)malloc(sizeof(int));
scanf( "%d", p );
printf( "%d\n", *p );
return 0;
}
allocaだともっとふさわしいかも。