- ベストアンサー
char *str; と char* str;
- みんなの回答 (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*); # まあ、どっちが正しい、っていうんじゃ無いんですよね
その他の回答 (2)
- dotcom
- ベストアンサー率67% (36/53)
両者とも「char型のポインタ変数であるstrを宣言する」という意味ですが、ANSI(米国国内情報システム標準規格)では「char *str;」といった表記を推奨しています。 #「char * str;」という表記でもOK。 以下のような変数の宣言を行うと、異なったものになります。 char *str1, *str2; /* str1、str2はともにchar型のポインタ変数 */ char* str1, str2; /* str1はchar型のポインタ変数、str2はchar型の変数 */
お礼
ありがとうございます。 同じ意味だけど、char *str; の方が良いことが分かりました。
- ysk6406
- ベストアンサー率40% (237/589)
文法的には、どっちも同じです。 ただし、書法としては、char* str; と書くのは良くありません。 char *str; と書くよう、習慣づけて下さい。 なぜ char* str; は良くないのか? 例えば、char* str, str2; というコードで考えてみて下さい。 str は char * 型、str2 は char 型ですが、このように書かれていると、いかにも両方が char * 型であるかのように見えませんか? こういう誤解を招かないようにするため、char *str; と書くべきです。
お礼
ありがとうございます。 char *str; と char* str; の違いが分からないから、 もしかしたら同じかなと思っていたら、同じだったんですね。
関連する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・C++・C#
- C++のクラス内のchar *strについて
初歩的な質問で申し訳ありませんが、いまC++を勉強していてわからないところがあったので質問させていただきます。以前C言語を少ししていたのでアスタリスクがポインタのことを指しているというのはわかるのですがC++でクラスを扱うとなったときなぜクラス内でconst char *strと変数の前にアスタリスクがつくのかがわかりません。ためしにアスタリスクを外してコンパイルすると4つくらいエラーが出てきて読み取り専用メンバへの代入とかchar* から char への不正(?)な変換とか出てくるのですが肝心のアスタリスクをつける意味が結局わかりませんでした。なので誰か教えてください。
- 締切済み
- C・C++・C#
- 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はこれでよいのか教えて下さい。
- ベストアンサー
- C・C++・C#
- (char *)についての質問
以下のコードの意味が理解できなかったので質問させていただきます。 str=(char *) malloc (sizeof(char) * (num+1)); ここで理解できなかった部分はstr=(char *)の部分(ここでさしているchar *とは何なのか?)とmalloc()関数内の「*」です。 ご回答よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- プログラムによく出てくるstrの意味
プログラムによく出てくるstrの意味はなんですか? 数学でよくpやrを使いますがそれと同じようなものでしょうか? 例:char str[] = "COMPUTER";
- ベストアンサー
- C・C++・C#
- 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));
- ベストアンサー
- C・C++・C#
- 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 を使用しています。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 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; が出力されず入力待ちとなり正常に動きませんでした。 原因がわからないです。原因と解決方法のご教授願います。
- ベストアンサー
- C・C++・C#
- ${str}と$strの違いとは?
スカラー変数の${str}と$strの違いとは何なのでしょうか。 スカラー変数における{}の意味がよくわかりません。 別になくても処理は変わらない気がしますが、 どういった際に{}は使用するのでしょうか?
- ベストアンサー
- CGI
お礼
ありがとうございます。 extern char *memcpy(char *, const char *); といような書式は初めて見ました。