新しく質問する

char *str; と char* str;

役に立った:2件
  • 質問者:A__
  • 投稿日時:2001/12/06 06:56
  • 困り度:暇なときに回答をください
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

char *str; と char* str;
どっちも同じことを意味しているんですか?

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:2件)
  • 参考になった:0件

No.3ベストアンサー20pt

  • 回答者:a-kuma
  • 回答日時:2001/12/06 10:08

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染むのでしょう。ちなみにそういう風な人たちは

char *str1, *str2;

とは、書けない体になっています。

char* str1;
char* str2;


変数の宣言だと、C に慣れていれば、char* str というのはちょっと違和感があるのは
私も分かりますが、関数のプロトタイプ宣言だと、どちらの方がすっきりしますか?

extern char *memcpy(char *, const char *);

extern char* memcpy(char*, const char*);


# まあ、どっちが正しい、っていうんじゃ無いんですよね

通報する

この回答へのお礼

ありがとうございます。
extern char *memcpy(char *, const char *);
といような書式は初めて見ました。

  • 参考になった:0件
  • 回答者:dotcom
  • 回答日時:2001/12/06 09:29

両者とも「char型のポインタ変数であるstrを宣言する」という意味ですが、ANSI(米国国内情報システム標準規格)では「char *str;」といった表記を推奨しています。
#「char * str;」という表記でもOK。
以下のような変数の宣言を行うと、異なったものになります。
char *str1, *str2; /* str1、str2はともにchar型のポインタ変数 */
char* str1, str2; /* str1はchar型のポインタ変数、str2はchar型の変数 */

通報する

この回答へのお礼

ありがとうございます。
同じ意味だけど、char *str; の方が良いことが分かりました。

  • 参考になった:0件

No.1ベストアンサー10pt

  • 回答者:ysk6406
  • 回答日時:2001/12/06 09:23

文法的には、どっちも同じです。
ただし、書法としては、char* str; と書くのは良くありません。
char *str; と書くよう、習慣づけて下さい。

なぜ char* str; は良くないのか?
例えば、char* str, str2; というコードで考えてみて下さい。
str は char * 型、str2 は char 型ですが、このように書かれていると、いかにも両方が char * 型であるかのように見えませんか?

こういう誤解を招かないようにするため、char *str; と書くべきです。

通報する

この回答へのお礼

ありがとうございます。
char *str; と char* str; の違いが分からないから、
もしかしたら同じかなと思っていたら、同じだったんですね。

  
このQ&Aは役に立ちましたか?(役に立った:2件)

このページのトップへ

Facebook公式ページ

公式Twitter