pap*_*cut 3 c++ string pointers char
我的理解是它应该包含一个 char 变量的内存地址,但现在我看到它可以用来创建字符串?例如,
char* ptr = "string";
Run Code Online (Sandbox Code Playgroud)
当要保存内存地址时,如何为 ptr 分配字符串?我认为需要取消引用运算符来更改所指向的值?
Bat*_*eba 11
"string"是const char[7]类型文字。C++ 允许您使用兔子耳朵来简化语言。为您添加了 0 终止符,这就是为什么有 7 个元素,而不是 6 个。
在各种情况下,数组类型衰减为指针类型,指针设置为数组的第一个元素。赋值就是这些实例之一。这就是这里正在发生的事情。
从形式上讲,从 C++11 开始,您的 C++ 编译器不应编译该语句。它应该是
const char* ptr = "string";
Run Code Online (Sandbox Code Playgroud)
你的理解是正确的;achar* 确实指向单个char.
诀窍是数组在内存中是连续排列的,因此给定一个指向数组第一个元素的指针,您可以通过向指针添加偏移量来访问其他元素。在您的示例中,事情看起来(逻辑上)是这样的:
+-----+
| ptr |
+--+--+
|
v
+-+-+---+---+---+---+---+----+
| s | t | r | i | n | g | \0 |
+---+---+---+---+---+---+----+
Run Code Online (Sandbox Code Playgroud)
ptr指向's'的开头"string"。通过添加1到ptr,您可以找到't',等等。这就是(内置)[]运算符所做的。 ptr[2]被定义为等价于*(ptr + 2):将指针偏移 2 个位置,然后获取结果指向的值。
一个'\0'字符用于标记字符串的结尾,以便使用代码知道停止查找更多字符。