« 日経Linux2008年7月号 | トップページ | 素直にスゴイなぁと思ってしまう。 »

2008/06/11

ポインタと配列 in C

単なるHello, World!プログラムだけど、ちょっと深く考えてみた。

#include <stdio.h>

int main(void)
{
  /*
    1.忘れがち
       文字列定数(ex: "This is String")
       は文字の配列である。これの内部表現
       は終端にヌル文字'\0'が挿入された、
       文字数+1の要素をもつ配列になっている。
    2.よく考えると
       printf("Hello\n");
       というのは、printf関数に文字配列
       (string[] = "Hello\n";)を引数として
       渡していることになる。
       したがって、printfが受け取っている
       のは、配列string[]の先頭へのポインタ
       (先頭のアドレス)である。
    3.ポインタと配列
       char array[]  = "now is the time";
       char *pointer = "now is the time";
       この2つの定義には違いがある。
       array   : 初期値となる文字列を'\0'を
                 ぴったり保持するだけの大きさ
                 を持つ配列。
                 配列内の文字列を変えても
                 arrayは同じメモリ位置を指す。
       pointer : 文字列定数を指すように初期化
                 されたポインタ。
                 したがって、他の場所を指す
                 ように後で変えることができる。
                 しかし、文字列の内容を変え
                 ようとすると、その結果は不定。
  */

  char *output = "Hello, World!\n";

  /*
    [printf]
     int printf(const char *format, ...);
     引数は可変個の出力書式文字列(*format)
  */

  printf(output);

  return 0;
}

|

« 日経Linux2008年7月号 | トップページ | 素直にスゴイなぁと思ってしまう。 »

C」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/41500962

この記事へのトラックバック一覧です: ポインタと配列 in C:

« 日経Linux2008年7月号 | トップページ | 素直にスゴイなぁと思ってしまう。 »