Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是‘char*’?_C++_Pointers_Types - Fatal编程技术网

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;