何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 37042
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

C/C++のポインタの機能--参照渡し(builder by ZDNet Japan)より:

今現在、第三者のレビュアーによるレビューを実施し、1ページ目だけ修正されています。それでもなぁ。。。

この「連載」の目次は、次のようになっています。

  • 第1回:連載開始の宣言
  • 第2回:C/C++が使われ続ける理由
  • 第3回、第5~7回:C/C++の開発環境
  • 第4回:C/C++を始めるための心構え
  • 第8回:5~7で作成した "Hello, World!" の説明
  • 第9回:データ型
  • 第10, 11回:scanf や printf の書式設定
  • 第12回:変数と配列
  • 第13回:配列と要素
  • 第14回:ポインタ(「参照渡し」改め「変数の場所」)
  • 第15回:ポインタと配列

一方、C言語におけるバイブル的存在、「K&R」と呼ばれる『プログラミング言語C』では、このように章が構成されています。

  • 第1章 やさしい入門
  • 第2章 データ型・演算子・式
  • 第3章 制御の流れ
  • 第4章 関数とプログラム構造
  • 第5章 ポインタと配列
  • 第6章 構造体
  • 第7章 入出力

これを比べると、K&R では、「ポインタ」が出てくる以前に、ポインタを使わなくてもある程度のプログラムが書けるところまでは説明してあることがわかるのではないでしょうか。


さて、訂正後の「C/C++のポインタの機能」から引用してみましょう。

C/C++のポインタの機能--変数の場所(アドレス)(builder by ZDNet Japan)より:

 これらはポインタを表し、主に文字列の操作やファイルをはじめとするデータの入出力を行う関数において、ポインタの機能を利用することを表している。とくにC言語では呼び出し元の変数を変更する「参照呼出し」という機能がないため、C言語に由来する関数ではポインタを使用することが多い。

著者がこだわっているのか。それとも編集部がこだわっているのか。どうにもこうにも、ここで「参照渡し/参照呼び出し」という語を使いたくて仕方ないらしい。

K&R では、「関数とプログラム構造」の後に、「ポインタと配列」が出てきます。これは、関数を説明していなければ、参照渡し(アドレス渡し)という語を使っても、何のことだかわからないからです。

K&R では、書式指定子の説明は第7章、最後の最後です(第8章は UNIX のシステム インターフェイスのため)。値渡しとアドレス渡しの違い、それぞれをどのように使い分けるかについての説明をしてから、それを使った関数の説明がされているわけです。しかし、「C/C++のイロハ」では、第15回まで進んでも、関数はおろか、C言語の構文にすらふれられていません。printf や scanf の説明が、第10,11回でされています。関数とはなんぞや?を説明する前に、関数を使い、書式について説明がされています。関数の説明もせず、なぜ「参照渡し」という語が出てくるのか。いったい、どんな人をターゲットとして書いているか、激しく謎。。。そう、C言語の解説としてグタグタなだけでなく、「解説の仕方」さえグタグタになっています。

私も、人のことはいえないのですけどね。社内向けにC言語の勉強会をしようと資料を作成中なのですが、今のところ、こんな感じで、半年ほどほったらかしorz プログラミングのイロハができていない相手に行う、というのはよいとして、どれくらいの時間をかけて、どれくらいのことをやるのかが決められていないので、見切り発車したはいいが、立ち往生中。

コピーしてメモ帳に貼り付けて、.txt として保存。そのファイルを PowerPoint にインポートすると、それらしいシートができあがります。

C言語の目的
 OSを作ること
  マシン語に近いことができる
  ライブラリを充実

C言語の特徴
 横着者が作った言語
  ++演算子など
  スペルの妙な短縮
   MemoryALLOCate, STRingCoPY
 ヘッダー ファイルとコード ファイル
  宣言と実装を分離
 main 関数から始まる
  main が隠される場合もある

C言語の型 - 型の種類
 数値型
  int(列挙体)/short int/long int/unsigned int
  float
  double/long double
 文字型
  char/unsigned char
 派生型
  配列
  ポインタ
  構造体/共用体
 void

C言語の型 - 型の大きさ
 char - 8ビット
 int - 最低16ビットで、long 以下
 short - int 以下
 long - short より大きく、最低32ビット

C言語の型 - 型の大きさ
 処理系に強く依存
 型の大きさに依存したコードは避ける(可搬性/相互運用を犠牲にする)

C言語の演算子
 演算子の種類と優先順位

C言語の構文
 制御構文
 繰り返し構文
 分岐構文
投稿日時 : 2008年4月1日 22:16
コメント
  • # re: もう一度絡んでみる
    スーパーあんどちん
    Posted @ 2008/04/01 22:44
    insigned intはtypoですね。

    ところで、Cの型って規格で最低ビット長決まってるんですか?
    知らなかった。
  • # re: もう一度絡んでみる
    Jitta
    Posted @ 2008/04/01 23:20
    スーパーあんちんどんさん、コメントありがとうございます。

    > insigned intはtypoですね。
    おお、typo だ typo だ。なおしました。ありがとうございます。

    > ところで、Cの型って規格で最低ビット長決まってるんですか?
    K&Rには、そう書いてあります。参照しているのが第2版なので、ANSI 対応等々でどうなったかは押さえていません。
  • # re: もう一度絡んでみる
    よねけん
    Posted @ 2008/04/02 10:08
    > char - 8ビット
    charだけは1バイトと決まっているだけじゃなかったでしょうか?
    昔々にどこかで読んだような気がします。
    #単なる記憶違いの可能性もあれば、あるいは、今の標準規格では違うのかもしれない可能性もあり。はずしていたらスルーしてくださいませ(^^;
  • # re: もう一度絡んでみる
    ddnp
    Posted @ 2008/04/02 12:02
    shrot - int 以下
    ↑これもtypoみたいっす

    >スペルの妙な短縮
    > MemoryALLOCate, STRingCoPY
    malloc()やstrcpy()が自然に感じてしまうのは
    すっかり毒されているからでしょうか(><

    ところでC言語において
    >main が隠される場合もある
    ってどんなときですか?
  • # re: もう一度絡んでみる
    シャノン
    Posted @ 2008/04/02 14:30
    ANSI というか ISO では、char は1バイトですが、1バイトは最低8ビットで、それより大きくても構わなかった気がします。
    int と long の最低ビット長ってありましたっけ?
    あと、最新規格だと、厳密に何ビットっていう整数型もあるはずです。
  • # re: もう一度絡んでみる
    uskz
    Posted @ 2008/04/02 14:53
    >最低8ビット
    そういう制限も無かったような
  • # re: もう一度絡んでみる
    uskz
    Posted @ 2008/04/02 14:58
    あ,すいません5.2.4.2.1にありました
  • # re: もう一度絡んでみる
    とっちゃん
    Posted @ 2008/04/02 16:27
    規格書ないので、記憶を頼りに...

    char 8bit以上(-127~+127が表現可能)
    int 16bit以上(-32767~+32767 が表現可能)
    short 16bit(省略)
    long 16bit(ry
    だったと思う。

    なので、最上位ビットONの補数表記も必須ではないはず。

    float/double はわからんけど、IEEE 合致は条件にはなっていないはず。
    #何かあるとしても推奨程度だと...
  • # re: もう一度絡んでみる
    とっちゃん
    Posted @ 2008/04/02 16:37
    ちと、見直してきた...

    C(C++ではない)で
    int n = 5;
    はOKだけど
    int *p = n;
    はNGなんじゃなかったっけ?
    定数初期化以外はできないと思っていたんだが...

    こんな細かいところは全然覚えてないんですが...orz
  • # re: もう一度絡んでみる
    Jitta
    Posted @ 2008/04/02 22:18
    よねけんさん、コメントありがとうございます。

    > charだけは1バイトと決まっているだけじゃなかったでしょうか?
    『プログラミング言語C第2版』ISBN4-320-02483-4 (1990年4月25日 初版41刷)付録A A4.2 によると、

    文字(char)と宣言されたオブジェクトは、実装されている文字セットの任意の文字を格納するだけの大きさを持っている。その文字セットの中の本物の文字が char オブジェクトに格納されると、その値はその文字を表す整数コードに等しくなり、非負となる。

    と書かれています。
    これだと、「Unicode を実装した」場合、char は何バイトになるんだろう?
    本編の方には、1バイトって書いてあります。う~ん、どっちだ?
    (おおよその場合、8ビット = 1バイト ということでよろ)


    ddnpさん、コメントありがとうございます。

    > ↑これもtypoみたいっす
    ぐはっ!
    本来のパワポの方は正しいので、コピらずにタイプしたのがミスの元...

    > すっかり毒されているからでしょうか
    大学の講義で、教授が「作者(どっちかは忘れた)はものぐさな人で...」と宣ったのがいまだに忘れられません。「str」を「ストラ」と読む私もすっかり毒されています。

    > >main が隠される場合もある
    > ってどんなときですか?
    Windows アプリケーション...って、それは C++ かっ!!


    シャノンさん、コメントありがとうございます。

    > int と long の最低ビット長ってありましたっけ?
    上記K&Rの、第2章「2.2 データ型とサイズ」に、

    守るべき唯一の条件は、short と int は少なくとも16ビット、long は少なくと32ビット、short は int より長くてはならず、int は long より長くてはいけない

    と書かれています。しかし、付録A4.2には、

    ただの int オブジェクトはホスト・マシンのアーキテクチャで提供される自然の大きさを持つ整数である。

    とあります。こちらが ANSI の規格かな。


    uskzさん、コメントありがとうございます。

    > あ,すいません5.2.4.2.1にありました
    すみません。すみません。すみません。
    規格書読まずにコーディングしています。。。
  • # re: もう一度絡んでみる
    Jitta
    Posted @ 2008/04/02 22:20
    とっちゃんさん、コメントありがとうございます。

    ん。「実装任せ」が、C のよいところではないかと(笑)
  • # re: もう一度絡んでみる
    Jitta
    Posted @ 2008/04/02 22:59
    なお、このエントリの、最大の目的は、これだったりします。

    コピーしてメモ帳に貼り付けて、.txt として保存。そのファイルを PowerPoint にインポートすると、それらしいシートができあがります。


    どのようにして、パワポ資料をまとめるか。後でエントリを作る予告。
  • # re: もう一度絡んでみる
    がる
    Posted @ 2008/04/03 19:37
    ちゃ~すなるるです~。
    ちなみにウチで書いてるのは…
    http://www.m-fr.net/study/learn_c/index.html
    こんな品揃えの「予定」ですが。まぁ多分色々変わります(笑

    まぁ…対象が「なにか1言語くらい知ってる人」だから、色々と多分違うのですが(苦笑
    いずれにしても、この手のって「色々な切り口の講座を読む」ほうが勉強になると思ってるので。
    楽しみにしてます ^^
  • # re: もう一度絡んでみる
    Jitta
    Posted @ 2008/04/03 21:26
    がるさん
     ん、読んだ。最初にマシン語がきているあたり、「やられた~!」と思った。
タイトル
名前
Url
コメント