奇怪的指针功能

use*_*323 2 c pointers function

void r(char *str) 
{
    char *new = str;
    while (*str != '\0') {
        if (*str != ' ') *(new++) = *str;
        str++;
    }
    *new = '\0';
}   
Run Code Online (Sandbox Code Playgroud)

我有这个功能,但我不理解if语句之后的代码.如果有人能向我解释,我将不胜感激.

Mic*_*gan 9

此函数正在从传入的值中删除空格str.

*(new++) = *str;意味着将指针指向新的字符串并取消引用它,以便我们可以使用它来存储它指向的记忆中的位置.然后取str指向的值,并将其取消引用它指向的char.将该char分配给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';
} 
Run Code Online (Sandbox Code Playgroud)

相同的代码功能,但使用for循环和数组索引而不是指针数学.