所以我无法在C中弄清楚这个指针代码,基本上它会从字符串中删除数字。我很困惑为什么在某些地方使用* src而在某些地方没有使用* src,还请解释一下此代码的工作原理。

char* RemoveDigits(char* input)
{
    char* dest = input;
    char* src = input;

    while(*src)
    {
        if (isdigit(*src))


       { src++; continue; } //here we are using src and not *src.
        *dest++ = *src++;
    }
    *dest = '\0';
    return input;
}

最佳答案

简短答案:

继续学习指针,这很重要,而且很难在仅几行答案中解释。一旦执行此操作,便会长答案。

长答案:

char* RemoveDigits(char* input) {
   char* dest = input;
   char* src = input;
   while(*src) {
      if (isdigit(*src)) {
         src++; continue;
      } //here we are using src and not *src.
      *dest++ = *src++;
   }
   *dest = '\0'; return input;
}


要理解此代码,您需要了解char数组如何在C中工作。
如果声明'char [5] example =“ test”;'变量“ example”将是指向数组第一个字符的指针,这意味着它将包含内存地址,在这种情况下将存储“ t”字符。

如果您键入“ * example”,则实际上是在说“给我存储在变量'example'中指定的内存地址的值,实际上意味着”给我第一个字母”,事实上,如果您键入printf('%c',* example)它将显示'T'。

一旦理解了这一点,就很容易猜出,通过说“ example ++”,您正在从“ T”的地址更改为内存“ E”中的后续下一个值,依此类推...

现在,让我们转到另一点,这是如何工作的?
一旦了解了如何在C中管理char数组,就很容易理解这一点。每个存储的char数组始终都带有'\ 0'字符。如果将所有字符放在while语句中,则将其视为“ true”,但将被视为“ false”的“ / 0”除外。通过检查存储在src中的值并在末尾将其递增,您会说“检查所有字符直到末尾”

最后一件事:如果当前字符“ * src”是数字字符,则只需传递到下一个字符并重新启动while而不执行下面的代码,否则,如果它是相关字符,则将其写入目标数组“ * dest = * src”然后递增“ dest ++”和“ src ++”以为下一个字符准备空间。

我知道这是第一次有点复杂,如果需要更多帮助,请发表评论。无论如何,互联网上都有很多很好的教程。

关于c - 为什么在某些地方和某些未使用的地方使用*,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47116169/

10-10 00:06
查看更多