初始化char指针C ++

Fed*_*ada 3 c++ pointers char

这怎么可能?

const char *cp = "Hello world";

我目前正在阅读C ++入门,并且发现了这个示例(我是一个初学者)。

为什么可以用字符串初始化char指针?据我所知,我真的无法理解该示例,因为我只能使用&+指向或取消引用对象的地址并随后为它们分配一些值来初始化指针。

Som*_*ude 6

字符串文字实际上是常量字符的数组(带有终止符)。

当你做

const char *cp = "Hello world";
Run Code Online (Sandbox Code Playgroud)

cp指向该数组的第一个字符。


还有一点解释:数组(不仅仅是使用数组的C样式字符串,char而是所有数组)自然会衰减到指向第一个元素的指针。

char array[] = "Hello world";  // An array of 12 characters (including terminator)
char *pointer1 = &array[0];  // Makes pointer1 point to the first element of array
char *pointer2 = array;  // Makes pointer2 point to the first element of array
Run Code Online (Sandbox Code Playgroud)

使用数组是一样的得到一个指向它的第一要素,所以其实也就是运营商的地址的&参与,但它暗示,并没有明确使用。

正如您中某些人可能已经指出的那样,在cp上面进行声明时,我用作const char *类型,在我的数组示例中,使用pointer1pointer2我使用了非常数普通char *类型。不同之处在于,编译器为字符串文字创建的数组在C ++中是恒定的,无法修改。尝试这样做将导致不确定的行为。相反,我在后一个示例中创建的数组不是常数,它是可修改的,因此不需要指向它的指针const


Bat*_*eba 5

"Hello world"是具有const char[12]类型的只读文字。请注意,最后一个元素是 NUL 终止符\0,该语言将其用作“字符串结尾”标记。"为方便起见,C 和 C++ 允许您使用字母数字字符周围的文字键入文字,并且为您添加了 NUL 终止符。

您可以通过称为指针衰减的机制将const char[12]类型分配给类型。const char*