1

首先,对不起我的英语不好。我想问一些我期望惊人的事情。我不确定这对每个人来说都很棒,但它适合我:) 让我给出示例代码

char Text[9] = "Sandrine";
for(char *Ptr = Text; *Ptr != '\0'; ++Ptr)
cout << Ptr << endl;

此代码打印

Sandrine
andrine
ndrine
drine
rine
ine
ne
e

我知道这是 C++ 中的一个复杂问题。为什么如果我调用 Ptr 来打印屏幕,它会打印所有数组。但是,如果 Text 数组是动态数组,则 Ptr 仅打印动态数组(Text)的第一种情况。为什么会这样?请解释 C++ 数组如何组合指向数组。

谢谢你的帮助。

4

2 回答 2

3

这里的数组没有什么特别之处。相反,特殊行为是char const*:在 C 中,指向带有终止空字符的字符序列的指针用于表示字符串。C++ 以字符串文字的形式继承了字符串的概念。为了支持这些字符串的输出,输出运算符 forchar const*将指向 a 的指针解释为char实际上是指向字符串开头的指针,并打印序列直到第一个空字符。

于 2013-11-09T23:02:20.843 回答
0

当你写

char Text[9] = "Sandrine";

“文本”是内存中的一个地址,它是字符串的起始地址,在它的第一个位置有一个“S”,后面跟着其余的字符。C 中的字符串由 \0 分隔,即“S andrine \0”

当你写

for(char *Ptr = Text; *Ptr != '\0'; ++Ptr)
  cout << Ptr << endl;

当 for 循环第一次运行时,它会打印整个字符串,因为 Ptr 指向字符串的开头,char* Ptr = Text当您递增 Ptr 时,您将指向下一个字符 Text + 1 即“a”,依此类推,一旦 Ptr 找到\0for 循环退出.

于 2013-11-09T23:09:02.470 回答