• ベストアンサー

char *str; と char* str;

a-kumaの回答

  • ベストアンサー
  • 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 *); といような書式は初めて見ました。

関連するQ&A

  • char str[256]の256の意味は?

    よく入門者などにchar str[256]という記述があります。 この256という数字には何か特別な意味があるのですか? 勿論2の8乗から来ているのでしょうが。 charって1バイト=8ビット=256ですよね。 str[256]というのを良く見かけるので、最初strは最大256個しか確保できないと思っていました。 でも、実際は1000でも良いのですよね。 ということで、どうして256という数字を使うのですか? 意味ありげな数字を使われると、初心者は混乱するので100とか200とかの方が良いと思うのですが。 特別な理由があるのでしょうか?

  • C++のクラス内のchar *strについて

    初歩的な質問で申し訳ありませんが、いまC++を勉強していてわからないところがあったので質問させていただきます。以前C言語を少ししていたのでアスタリスクがポインタのことを指しているというのはわかるのですがC++でクラスを扱うとなったときなぜクラス内でconst char *strと変数の前にアスタリスクがつくのかがわかりません。ためしにアスタリスクを外してコンパイルすると4つくらいエラーが出てきて読み取り専用メンバへの代入とかchar* から char への不正(?)な変換とか出てくるのですが肝心のアスタリスクをつける意味が結局わかりませんでした。なので誰か教えてください。

  • char[]とchar*

    #include<iostream.h> main() { char str1[] = "AB"; char *str2 = "ab"; *(str1+1) = 'C'; *(str2+1) = 'c'; printf("%s\n", str1); printf("%s\n", str2); } このソースの *(str2+1) = 'c'; の所はC++では間違った処理ですか? []かnewなどの変数なら書き換えてよいのは分かりますが、str2はこれでよいのか教えて下さい。

  • (char *)についての質問

    以下のコードの意味が理解できなかったので質問させていただきます。 str=(char *) malloc (sizeof(char) * (num+1)); ここで理解できなかった部分はstr=(char *)の部分(ここでさしているchar *とは何なのか?)とmalloc()関数内の「*」です。 ご回答よろしくお願いいたします。

  • プログラムによく出てくるstrの意味

    プログラムによく出てくるstrの意味はなんですか? 数学でよくpやrを使いますがそれと同じようなものでしょうか? 例:char str[] = "COMPUTER";

  • sizeof(char *)

    SendMessage()で、lParamに2つの (char *)を入れたいんだけど入りますか? LPARAM型はLONG型のtypedefだから、LONG型は(char *)型の2倍以上の大きさがあるか ということが知りたいです。 char str1[] = "2003年は"; char str2[] = "件登録されています"; SendMessage(hWnd, WM_NULL, wParam, MAKELPARAM(str1, str2));

  • char型配列について

    基本的なことですが、 char str[5]="Hello"; --> str[0]='H' str[1]='e' str[2]='l' str[3]='l' str[4]='o' str[5]='\0' では、ないのでしょうか? エラーが出ます。 //error C2117: 'str' : 指定された配列には、初期化子が多すぎます。 char str[6]="Hello"; では、コンパイルできます。 ---------------------------------- また、 #include<iostream> using namespace std; int main() { char str[6]="Hello"; cout << str << endl; for(int i=0;i<7;i++) { cout << "i=" << str[i]; if(str[i]=='\0'){cout << " NULL" << endl;} else{cout << endl;} } getchar();return 0; } ----------------------------------------------- とすると、 Hello i=H i=e i=l i=l i=o i= NULL <--ここで、NULLなら、 i=フ <--このぶんは、いらないと思うのですが、、、 となります。 str[6] i=6 は、何を意味するのでしょうか? Visual C++ NET を使用しています。 よろしくお願いします。

  • string から unsigned char へ

    unsigned char* uchar_string(string* str) { int length = str->length(); const char* cchar = str->c_str(); unsigned char* uchar = new unsigned char[length+1]; for(int i=0; i=length; i++) { uchar[i] = (unsigned char)cchar[i]; } return uchar; } int main() { string str; cin >> str; unsigned char* uc; uc = uchar_string(&str); cout << uc; delete uctest; return 0; } このようにしたところ、cout << uc; が出力されず入力待ちとなり正常に動きませんでした。 原因がわからないです。原因と解決方法のご教授願います。

  • char型の比較

    C++で文字の比較をしたいのですが、コンソールアプリで   char str[3] = "困";   printf( "%x", str[0] ); と記述すると、"困"の文字コードは"8da2(Shift_JIS)"なので、   8d と表示されると思っていたのですが、実際は   ffffff8d と表示されます。 同じ理由で文字の比較をする際にも   str[0] == 0xffffff8d または   str[0] == (char)0x8d としなければ正しい結果が得られません。 これは何が原因なのでしょうか? よろしくお願いします。

  • ${str}と$strの違いとは?

    スカラー変数の${str}と$strの違いとは何なのでしょうか。 スカラー変数における{}の意味がよくわかりません。 別になくても処理は変わらない気がしますが、 どういった際に{}は使用するのでしょうか?

    • ベストアンサー
    • CGI