void r(char *str)
{
char *new = str;
while (*str != '\0') {
if (*str != ' ') *(new++) = *str;
str++;
}
*new = '\0';
}
我有这个函数,但我不明白 if 语句后的代码。如果有人能向我解释一下,我将不胜感激。
最佳答案
此函数从传入的值 str
中去除空格。
*(new++) = *str;
表示获取指向字符串 new 的指针并取消引用它,以便我们可以使用它来存储它指向的内存位置。然后获取 str 指向的值并将其取消引用到它指向的 char。将该 char 分配给 new 所在的位置,然后将 new 指针移动到下一个位置。最后,无论值是否为空格,始终将 str 指针与 str++
一起移动。
如果这样写你会更清楚:
void r(char *str)
{
char *new = str;
int newStringIndex = 0;
for(int i=0; str[i] != '\0'; i++)
{
if (str[i] != ' ')
{
new[newStringIndex++] = str[i];
}
}
new[newStringIndex] = '\0';
}
相同的代码功能,但使用 for 循环和数组索引而不是指针数学。
关于c - 奇怪的指针函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16818377/