C++ 什么是‘char*’?
确切地说,C++ 什么是‘char*’?,c++,pointers,types,C++,Pointers,Types,确切地说,char*是什么?是指针吗?我认为指针在标识符之前有星号,而不是类型(不一定是同一个东西).?它是指向字符的指针 声明指针时,星号在类型之后、标识符之前,空格不重要。这些都声明char指针: char *pointer1; char* pointer2; char * pointer3; char*pointer4; // This is illegible, but legal! 为了让事情更加混乱,当一次声明多个变量时,星号只适用于单个标识符(在其右侧)。例如: 主要是因为
char*
是什么?是指针吗?我认为指针在标识符之前有星号,而不是类型(不一定是同一个东西).?它是指向字符的指针
声明指针时,星号在类型之后、标识符之前,空格不重要。这些都声明char
指针:
char *pointer1;
char* pointer2;
char * pointer3;
char*pointer4; // This is illegible, but legal!
为了让事情更加混乱,当一次声明多个变量时,星号只适用于单个标识符(在其右侧)。例如:
主要是因为这个原因,星号通常紧靠标识符而不是类型,因为它避免了这种混乱的声明。它是指向字符的指针。你也可以写
char* bla;
或
是一样的
现在,在C语言中,字符串使用了指向字符的指针:字符串的第一个字符是指针指向的位置,地址中的下一个字符是下一个字符,等等,直到到达空的终端符号\0
<>但是,C++不再需要这样做了。改用std::string(或类似的类)。char*这个东西被称为安全漏洞最常见的来源
处理指针时,
*
字符显示在两个不同的位置。首先,类型“指向T的指针”由T*
表示(在类型名称后面追加*
)。其次,当取消引用指针时,这是通过在要取消引用的指针变量的名称前面加上*
来完成的。空白通常不重要,所以
char* suchandsuch;
char *suchandsuch;
char
*
suchandsuch;
都是一样的。C不关心空格,所以
char*foo
与char*foo相同
@PaulTomblin:C确实关心空格,只是不关心那种特殊情况<代码>半苹果代码>和字符代码>是完全不同的。那么,为什么在一行上声明多个指针时,必须为每个指针使用星号呢?例如,char*Pointer1,*Pointer2代码>。我仍然不明白他们为什么这样设计char*
对我来说似乎更自然(作为一种类型)。@难以捉摸的:是的,我也是:-)我经常使用char*
我自己,为了清晰起见,我每行只能声明一条。让我困惑的是char*
怎么可能是字符串?字符串是字符的数组
——那么为什么我们可以编写类似const char*str=“Hello”这样的代码呢
-char*
只指向单个字符,而不是字符串?连续字符数组必须从内存中的某个位置开始。char*
只是指向该字符串的第一个字符--(在本例中为“H”),但在该字符之后是另一个字符,另一个字符,因此指针可以解释为指向一个(以null结尾的)字符串
char *bla;
char* suchandsuch;
char *suchandsuch;
char
*
suchandsuch;