C/C++のポインタの機能--配列との関係

沖林正紀
2008/03/28 17:00

ポインタは配列と深い関係があることを前回言及したが、今回はそれが具体的にどのようなことなのかを説明していきたい。

現在、本稿には技術的な誤りが存在するため、詳細をレビュー中です。
初めてご覧になる方は、コメント欄もあわせてお読み下さい。
また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。

ポインタ変数の配列

 ポインタ変数も配列を宣言できる。これは文字列の配列を表す場合によく用いられる。以下にその例を示す。

    char *s[] = { "Japanese", "English", "Chinese" };
    printf( "%s\n", s[ 0 ] );  /* Japanese と出力される */
    printf( "%s\n", s[ 1 ] );  /* English と出力される */
    printf( "%s\n", s[ 2 ] );  /* Chinese と出力される */
    printf( "%s\n", *s );         /* Japanese と出力される */
    printf( "%s\n", *(s + 1) );   /* English と出力される */
    printf( "%s\n", *(s + 2) );   /* Chinese と出力される */

 さきほど*sで1つの文字列を表していたが、この例では*s[]によって複数の文字列を要素とする配列を表している。ただ、さきほどs[]でも*sでも1つの文字列を表すことができ、処理するにあたって特に変わりないことを説明したところだ。

 それなら、*s[]を**sのように記述したらどのように処理されるだろう。以下の例をご覧いただきたい。

    char *s[] = { "Japanese", "English", "Chinese" };
    printf( "%c\n", **s );         /* J と出力される */
    printf( "%c\n", **(s + 1) );   /* E と出力される */
    printf( "%c\n", **(s + 2) );   /* C と出力される */

 s は*s[]の最初の文字列の頭文字であるJを表している。同様に(s + 1)は2番目の文字列の頭文字E、*(s + 2)は3番目の文字列の頭文字Cを表していることが分かる。それ以外の文字をポインタ変数で表すには、どうしたら良いのだろう。

 次回は、この続きを説明していきたい。

  • コメント(8件)

#1 επιστημη  - 2008/03/29 10:05:24

> ポインタ変数と配列との深い関係を表す例を示そう。 > それは... 続きを見る
» 不適切なコメントを報告する

#2 επιστημη  - 2008/03/29 10:14:39

[2page冒頭] > さきほど*sで1つの文字列を表していたが、 違いま... 続きを見る
» 不適切なコメントを報告する

#3 がる  - 2008/03/31 00:20:21

んと…とりあえず筆者の方に伺ってみたいのですが。 char s[] = "H... 続きを見る
» 不適切なコメントを報告する

#4 bright  - 2008/04/06 11:12:53

配列の変数名をそのままポインタ変数名として扱えるのではなく、配列の... 続きを見る
» 不適切なコメントを報告する

#5 リュート  - 2008/04/17 21:27:08

気になったことがあるのですが,コメントの書き方で char s[] = "... 続きを見る
» 不適切なコメントを報告する

#6 がる  - 2008/04/19 01:33:55

ところで。「C/C++のポインタの機能--配列との関係」が未修正のまま大分... 続きを見る
» 不適切なコメントを報告する

#7 tomita  - 2008/04/21 13:59:01

builder編集部の冨田です。 連載の修正が遅れており、ご迷惑をおかけし... 続きを見る
» 不適切なコメントを報告する

#8 オワタ  - 2008/05/13 10:42:55

この筆者の方はIなのですか。。。 Iのレベルも落ちたもんだ。。。
» 不適切なコメントを報告する
記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ