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

时间:2015-08-02 13:30:37

标签: c++ arrays pointers pointer-arithmetic

我有一个使用指针算法的函数来打印出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]

1 个答案:

答案 0 :(得分:1)

--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))