2010-11-27 136 views
6

什麼是char*,究竟是什麼?它是一個指針嗎?我認爲指針在標識符之前有星號,而不是類型(不一定是相同的東西)...?什麼是char *?

+9

C不關心空格,所以`char * foo;`和'char * foo'是一樣的;` – 2010-11-27 20:17:14

+6

@PaulTomblin:C確實在意空間,而不是在那個特殊情況下。 `char蘋果;`和`charapple;`是完全不同的。 – 2012-01-17 17:47:48

回答

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

那麼,爲什麼當在一行上聲明多個指針時,你必須爲每個指針使用一個星號?例如,`char * Pointer1,* Pointer2;`。 – Maxpm 2010-11-27 20:20:15

15

這是一個指向角色的指針。你可以寫任何

char* bla; 

char *bla; 

這是一樣的。

現在,在C中,指向字符串的指針用於字符串:字符串的第一個字符將是指針指向的位置,接下來出現的地址中的下一個字符等等,直到Null - 終端符號\0已達到。

但是:沒有必要在C++中做到這一點了。改用std :: string(或類似的類)。 char *的東西被命名爲最常見的安全漏洞來源!

1

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

*字符在兩個不同的地方使用指針打交道時顯示出來。首先,類型「指向T的指針」由T*(將*附加到類型名稱)表示。其次,在取消引用指針時,通過將*加上要取消引用的指針變量的名稱來完成。

1

空白不正常關係,所以

char* suchandsuch; 

char *suchandsuch; 

char 
* 
suchandsuch; 

都是一樣的。