【问题标题】:How to access array of characters in different ways如何以不同的方式访问字符数组
【发布时间】:2015-08-02 13:30:36
【问题描述】:

我有一个函数使用指针算法打印出 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 = &amp;c [n - 1]; 更改为 char *p = &amp;c [n];,那么它可以工作,但我希望 &amp;c [n - 1] 等于 char 数组中的最后一个字符,而不是 &amp;c[n]

【问题讨论】:

    标签: c++ arrays pointers pointer-arithmetic


    【解决方案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))

    【讨论】:

    • +1, "*--p" 字面意思是“将p的地址减1,然后取那个地址的值”。因此,您将在输出中首先获得“c[n-2]”字符。
    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多