逆转字符串时为什么不使用指针指针?

时间:2013-02-10 22:55:44

标签: c function pointers scope

我看过这段代码:

void reverse_string(char *str)
{
    /* skip null */
    if (str == 0)
    {
        return;
    }

    /* skip empty string */
    if (*str == 0)
    {
        return;
    }

    /* get range */
    char *start = str;
    char *end = start + strlen(str) - 1; /* -1 for \0 */
    char temp;

    /* reverse */
    while (end > start)
    {
        /* swap */
        temp = *start;
        *start = *end;
        *end = temp;

        /* move */
        ++start;
        --end;
    }
}

我不明白为什么在函数中没有传递指针指针。如果在函数内部传递了指针的副本,那怎么能被颠倒呢?如何将更改传播到外部?

5 个答案:

答案 0 :(得分:3)

  

如果传递指针的副本,那么如何反转呢?   里面的功能?如何将更改传播到

之外

它的工作原理是因为你在该指针所指向的内存中进行了更改。因此,在函数结束后,指针仍然指向它所使用的位置,但内容(字符的顺序)已经改变。换句话说,没有必要将地址str更改为。

答案 1 :(得分:1)

char *数组的内存内容已经过修改。

答案 2 :(得分:0)

字符串正在反转。也就是说,指向字符串的指针保持不变,但它指向的字符串是相反的。

答案 3 :(得分:0)

看一下while循环,你会发现字符串是就地反转的。

   while (end > start)
    {
        /* swap */
        temp = *start;
        *start = *end;
        *end = temp;

        /* move */
        ++start;
        --end;
    }

答案 4 :(得分:0)

反转字符串不是指针上的操作。这是对数据的操作,由指针指向。这就是指针本身可以通过值传递给函数的原因,即在函数内部它实际上是传递给函数的指针的副本 - 它没关系,因为不需要修改指针,只需指向数据。