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;
}
反转字符串不是对指针的操作。它是指针指向的数据上的操作。这就是指针本身可以通过值传递给函数的原因,也就是说,在函数内部,它实际上是传递给函数的指针的副本-这没关系,因为不需要修改指针,只需修改指针数据。反转字符串不是对指针的操作。它是指针指向的数据上的操作。这就是指针本身可以通过值传递给函数的原因,也就是说,在函数内部,它实际上是传递给函数的指针的副本-这没关系,因为不需要修改指针,只需修改指向的数据。想想指针指向的是什么。这个位置在这个函数和调用者中是相同的。想想指针指向什么。此函数和调用方中的位置相同。