这怎么可能?
const char *cp = "Hello world";
我目前正在阅读C ++入门,并且发现了这个示例(我是一个初学者)。
为什么可以用字符串初始化char指针?据我所知,我真的无法理解该示例,因为我只能使用&+指向或取消引用对象的地址并随后为它们分配一些值来初始化指针。
字符串文字实际上是常量字符的数组(带有终止符)。
当你做
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 *类型,在我的数组示例中,使用pointer1和pointer2我使用了非常数普通char *类型。不同之处在于,编译器为字符串文字创建的数组在C ++中是恒定的,无法修改。尝试这样做将导致不确定的行为。相反,我在后一个示例中创建的数组不是常数,它是可修改的,因此不需要指向它的指针const。
"Hello world"是具有const char[12]类型的只读文字。请注意,最后一个元素是 NUL 终止符\0,该语言将其用作“字符串结尾”标记。"为方便起见,C 和 C++ 允许您使用字母数字字符周围的文字键入文字,并且为您添加了 NUL 终止符。
您可以通过称为指针衰减的机制将const char[12]类型分配给类型。const char*