繁体   English   中英

C++ 中 char* 到底是什么意思?

[英]What exactly does a char* mean in C++?

我的理解是它应该包含一个 char 变量的内存地址,但现在我看到它可以用来创建字符串? 例如,

char* ptr = "string";

当要保存内存地址时,如何为 ptr 分配字符串? 我认为需要取消引用运算符来更改所指向的值?

"string"是一个const char[7]类型的字面量 C++ 允许您使用兔子耳朵来简化语言。 为您添加了 0 终止符,这就是为什么有 7 个元素,而不是 6 个。

在各种情况下,数组类型衰减为指针类型,指针设置为数组的第一个元素。 赋值就是这些实例之一。 这就是这里正在发生的事情。

从形式上讲,从 C++11 开始,您的 C++ 编译器不应编译该语句。 它应该是

const char* ptr = "string";

你的理解是正确的; a char*确实指向单个char

诀窍是数组在内存中是连续排列的,因此给定一个指向数组第一个元素的指针,您可以通过向指针添加偏移量来访问其他元素。 在您的示例中,事情看起来(逻辑上)是这样的:

+-----+
| ptr |
+--+--+
   |
   v
 +-+-+---+---+---+---+---+----+
 | s | t | r | i | n | g | \0 |
 +---+---+---+---+---+---+----+

ptr指向"string"开头的's' 通过将1添加到ptr ,您可以找到't' ,依此类推。 这就是(内置) []操作符所做的。 ptr[2]被定义为等价于*(ptr + 2) :将指针偏移 2 个位置,然后获取结果指向的值。

'\\0'字符用于标记字符串的结尾,以便使用代码知道停止查找更多字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM