2010-11-27 7 views
6

正確にchar*とは何ですか?それはポインタですか?私はポインタが識別子の前にアスタリスクを持っていると思っていましたが、タイプ(必ずしも同じものではありません)ではなく...?`char *`とは何ですか?

+9

Cはスペースを気にしないので、 'char * foo;'は 'char * foo;'と同じです。 –

+6

@PaulTomblin:Cは空白を気にします。 'char apple;'と 'charapple;'は全く異なっています。 –

答えて

17

charへのポインタです。

ポインタを宣言するとき、アスタリスクは空白を無視して型の前と識別子の前に入ります。これらはすべて、charポインタ宣言:一度に複数の変数を宣言する際に物事がさらに混乱にするために

char *pointer1; 
char* pointer2; 
char * pointer3; 
char*pointer4; // This is illegible, but legal! 

を、アスタリスクは(その右に)単一の識別子に適用されます。例えば:

char* foo, bar; // foo is a pointer to a char, but bar is just a char 

それは、この混乱の宣言を回避するようにアスタリスクは、従来、識別子としないタイプにすぐ隣接して配置されていることをこの理由のために主にあります。

+0

なぜ、1行に複数のポインタを宣言するときに、それぞれにアスタリスクを使用する必要があるのでしょうか?たとえば、 'char * Pointer1、* Pointer2;'とします。 – Maxpm

+0

@Maxpm:Hehはあなたがコメントした通りにそれを追加して編集していました:-) – Cameron

+0

私はまだ、彼らがそれをデザインした理由を理解できません。 – jwueller

15

文字へのポインタです。あなたはそれが同じである

char* bla; 

または

char *bla; 

のいずれか書くことができます。

Cでは、charへのポインタが文字列に使用されました。文字列の最初の文字は、ポインタが指し示す場所、次に来るアドレスの次の文字などです。 -Terminal-Symbol \0に達しました。

しかし、C++でこれを行う必要はありません。代わりにstd :: string(または類似のクラス)を使用してください。 char *のものはセキュリティバグのための最も頻繁なソースの一つに選ばれました!ポインタを扱うとき

+1

私は同じ答えを投稿しようとしていた – Ramilol

1

http://cplusplus.com/doc/tutorial/pointers/

*文字は、2つの異なる場所に表示されます。まず、タイプ「Tへのポインタ」はT*(タイプ名に*を付加する)で示されます。第2に、逆参照したいポインタ変数の名前に*を先行させることによって行われる、ポインタの逆参照。

1

空白が正常に重要ではありませんので、

char* suchandsuch; 

char *suchandsuch; 

char 
* 
suchandsuch; 

はすべて同じです。

関連する問題