如何以不同方式访问字符数组

How to access array of characters in different ways

我有一个函数使用指针算法打印出 char*:

中的所有字符
void printCharArray(char* c,int n)
{
    for (char*p=c+n-1; n; n--) 
        cout << *p--;
}

以上代码有效,但我想尝试另一种无效的方法:

void printCharArray(char* c,int n)
{
    char *p = &c [n - 1];
    for (int i = 0; i < n; i++)
        cout << *--p;
}

奇怪的行为是,如果我将 char *p = &c [n - 1]; 更改为 char *p = &c [n]; 那么它可以工作,但我希望 &c [n - 1] 等于 char 数组中的最后一个字符而不是 &c[n]?

--p; 等同于 p = p - 1; p;
p--; 等同于 auto tmp = p; p = p - 1; tmp

换句话说

void printCharArray(char* c,int n)
{
    for (char*p=c+n-1; n; n--) 
        cout << *p--;
}

这将显示 *p*(p - 1)、...、*(p - n)

void printCharArray(char* c,int n)
{
    char *p = &c [n - 1];
    for (int i = 0; i < n; i++)
        cout << *--p;
}

这将显示 *(p - 1)*(p - 2)、...、*(p - (n+1))