我看过这段代码:
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;
}
}
我不明白为什么在函数中没有传递指针指针。如果在函数内部传递了指针的副本,那怎么能被颠倒呢?如何将更改传播到外部?
答案 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)
反转字符串不是指针上的操作。这是对数据的操作,由指针指向。这就是指针本身可以通过值传递给函数的原因,即在函数内部它实际上是传递给函数的指针的副本 - 它没关系,因为不需要修改指针,只需指向数据。