• ベストアンサー

char *str; と char* str;

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

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

同じことを指している、というのは、先の回答の通りです。 また、ひとつの宣言で変数を複数宣言したときに、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*); # まあ、どっちが正しい、っていうんじゃ無いんですよね

A__
質問者

お礼

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

その他の回答 (2)

  • dotcom
  • ベストアンサー率67% (36/53)
回答No.2

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

A__
質問者

お礼

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

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.1

文法的には、どっちも同じです。 ただし、書法としては、char* str; と書くのは良くありません。 char *str; と書くよう、習慣づけて下さい。 なぜ char* str; は良くないのか? 例えば、char* str, str2; というコードで考えてみて下さい。 str は char * 型、str2 は char 型ですが、このように書かれていると、いかにも両方が char * 型であるかのように見えませんか? こういう誤解を招かないようにするため、char *str; と書くべきです。

A__
質問者

お礼

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

関連するQ&A