c - 奇怪的指针函数

标签 c function pointers

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/

相关文章:

c - 使用指针从方法获取 char 数组值。

c - SCons - 为库中的所有对象添加依赖项

c++ - 无法在函数 main() 中创建抽象类的指针

c++ - 在没有数组或 vector C++ 的情况下存储值

c - 简单的动态内存分配错误

c - 读取进程内存

c - Mac OS X 上的原生 PNG 库 (mavericks)

python - 多重分组(迭代或应用函数)

r - 在包装器中将参数传递给 ggplot

r - 将 data.frame 中的数字转换为 R 中的重要性星星