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

沖林正紀
2008/03/28 17:00
  • 8件のコメント

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

> ポインタ変数と配列との深い関係を表す例を示そう。
> それは、配列の変数名をそのままポインタ変数名として扱えるということだ。

違います。n に値を代入できません(左辺値になれない)から、配列の変数名はポインタ"定数"扱いです。
» 不適切なコメントを報告する

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

[2page冒頭]
> さきほど*sで1つの文字列を表していたが、

違います。*sは"文字列"ではなく(先頭の)"文字"です。
文字列を表すのは*のつかない s です。
» 不適切なコメントを報告する

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

んと…とりあえず筆者の方に伺ってみたいのですが。
char s[] = "Hello";

char *s = "Hello";
との違いが「どのあたりにある」と感じられてますでしょうか?
この違いがわかれば「配列の変数名をそのままポインタ変数名として扱える」といった暴論には繋がらないのでは無かろうか、と思います。

ポインタとか配列とかやるのであれば、まずはこのあたりの「メモリレベルでの差異」をきちんと理解してから、になさったほうがよろしいように思うのですが如何なものでしょうか。
» 不適切なコメントを報告する

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

配列の変数名をそのままポインタ変数名として扱えるのではなく、配列のデータアクセスと、ポインタ経由でのデータアクセスに同じ表現が使えるだけのことです。この記述方法は便利ですが、初学者を混乱させてしまう仕様であることも事実だと思います。

初学者に誤った知識を与えないよう、早く説明を修正された方が良いでしょう。
» 不適切なコメントを報告する

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

気になったことがあるのですが,コメントの書き方で
char s[] = "Hello";

char s[] = {'H', 'e', 'l', 'l', 'o', '\0'};
が同じ内容のように読み取れるので,
「文字列は,s[]ではなく*sに直接代入する記述も可能」
という文は,
char *s = {'H', 'e', 'l', 'l', 'o', '\0' };
も可能である,と言っているように思えます.更にその直後の文字列のみに有効で,
int *n = {1, 2, 3};
という記述は不可能,という説明がその誤解を深めているように思います.
しかし,実際には
char *s = {'H', 'e', 'l', 'l', 'o', '\0'};
も不可能だと思います.
少なくとも,コメントの中の/* char s[] = {'H', ... */ の部分は削除した方が良いのではないでしょうか.
» 不適切なコメントを報告する

#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ログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ