2010-11-27 135 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; 

都是一样的。