Short answer:
Go study pointers, it's really important and too tricky to explain in just few lines of answer. Once you do that go to long answer.
Long answer:
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;
}
To understand this code you need to get how char arrays work in C.
If you declare 'char[5] example = "test";' the variable 'example' will be a pointer to the first char of the array, which means that it will contain the memory address in which in this case the 't' character is stored.
If you type '*example' instead you're basically saying "give me the value stored at the memory address specified in the variable 'example', which will practically mean "give me the first letter", as a matter of fact if you type printf('%c', *example) it will show 'T'.
Once you understand this it will be easy to guess that by saying "example++" you are changing from the address of the 'T' to subsequent next value in memory 'E' and so on...
Now let's move to another point, how does this while works?
This is pretty simple to understand once you get how arrays of char are managed in C. Each stored arrays of char always and with the '\0' character. Every character if placed in while statement will be considered as 'true' except for '/0' which will be considered 'false'. By checking the value stored in src and incrementing it at the end of the while you're saying "check all the character till the end"
Last thing: if the current character '*src' is a digit character just pass to the next character and restart the while without execute the bellow code, else if it's a relevant character write it to the destination array '*dest = *src' and then increment 'dest++' and 'src++' to prepare space for the next character.
I know this is a bit complicated the first time, comment if you need more help. Anyway on the internet there are a lot of good tutorial.