C 为什么不在反转字符串时使用指针到指针?

C 为什么不在反转字符串时使用指针到指针?,c,function,pointers,scope,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

我看到了这个代码:

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;
    }
}
我不明白为什么函数中没有传递指向指针的指针。如果传递的指针的副本是在函数内部生成的,那么如何反转呢?这些更改是如何传播到外部的

如果复制了所传递的指针,那么如何反转呢 函数内部?这些更改是如何传播到外部的

它之所以有效,是因为您正在该指针指向的内存中进行更改。因此,在函数结束后,指针仍然指向以前的位置,但内容(字符顺序)已更改。换句话说,不需要更改
str
指向的地址

如果复制了所传递的指针,那么如何反转呢 函数内部?这些更改是如何传播到外部的


它之所以有效,是因为您正在该指针指向的内存中进行更改。因此,在函数结束后,指针仍然指向以前的位置,但内容(字符顺序)已更改。换句话说,不需要更改str指向的地址。

修改
char*
数组的内存内容。

修改
char*
数组的内存内容。

字符串在适当的位置反转。也就是说,指向字符串的指针保持不变,但它所指向的字符串是反向的。

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

查看while循环,您将看到该字符串在适当的位置反向

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

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

查看while循环,您将看到字符串在适当的位置反转

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

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

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

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

想想指针指向的是什么。这个位置在这个函数和调用者中是相同的。想想指针指向什么。此函数和调用方中的位置相同。