数组上的指针算术

kat*_*kat 4 c++ arrays pointers

当我运行下面的代码时,我的输出不是我所期望的.

我理解它的方式是ptr指向Str数组的第一个元素的地址.我认为ptr + 5应该导致+第五元素f.所以输出应该只显示f而不是两者fg.

它为什么显示fg?它与如何cout显示数组有关吗?

#include <iostream>
using namespace std;

int main()
{
    char *ptr;
    char Str[] = "abcdefg";

    ptr = Str;
    ptr += 5;

    cout << ptr;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期产量: f

实际产量: fg

use*_*007 6

当你声明:

char Str[] = "abcdefg"
Run Code Online (Sandbox Code Playgroud)

字符串abcdefg隐式存储,并带有一个\0标记字符串结尾的额外字符.

所以,当你cout一个char*输出将是存储的所有字符,其中char *点并存储在连续的内存位置后的所有字符char*,直到\0字符在存储位置之一碰到的问题!因为,在你的例子中\0字符是后面g因此打印2个字符.

如果您只想打印当前字符,您应该这样做::

cout << *ptr;
Run Code Online (Sandbox Code Playgroud)