指针和数组指向数组问题

Pointers & Arrays Pointing Array issue

本文关键字:数组 问题 指针      更新时间:2023-10-16

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

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

此代码打印

Sandrine
andrine
ndrine
drine
rine
ine
ne
e

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

感谢您的帮助。

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

当你写的时候

char Text[9] = "Sandrine";
"

文本"是内存中的一个地址,它是字符串的起始地址,在其第一个位置有一个"S",后跟其余字符。C 中的字符串由 \0 分隔,即"S a n d r i n e \0"

当你写的时候

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

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