所以我无法在C.中找出这个指针代码。基本上它从字符串中删除了数字。我很困惑为什么有些地方* 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;
}
答案 0 :(得分:2)
简答:
转到学习指针,只需几行答案就可以解释,这非常重要而且太棘手。一旦你这样做,就可以回答。
答案很长:
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]示例=" test&#34 ;;'变量'示例'将是一个指向数组的第一个字符的指针,这意味着它将包含内存地址,在这种情况下,' t'字符存储。
如果您输入' *示例'相反,你基本上是在说#34;给我存储在变量'例如'中指定的存储地址的值,这实际上意味着"给我第一个字母"事实上,如果你输入printf('%c',*示例),它将显示' T'。
一旦你理解了这一点,通过说"示例++"很容易猜到。你正在改变' T'到记忆中随后的下一个值' E'等等...
现在让我们转到另一个角度,这有什么作用? 一旦你了解了如何在C中管理char数组,这很容易理解。每个存储的char数组总是和' \ 0'字符。如果放入while语句中的每个字符都将被视为“真实”字符。除了' / 0'这将被视为“假”'。通过检查存储在src中的值并在结束时递增它,你会说"检查所有字符直到结束"
最后一件事:如果当前角色' * src'是一个数字字符只是传递给下一个字符并重新启动while而不执行下面的代码,否则如果相关字符将其写入目标数组' * dest = * src'然后增加' dest ++'和' src ++'为下一个角色准备空间。
我知道这是第一次有点复杂,如果您需要更多帮助,请发表评论。无论如何在互联网上有很多很好的教程。
答案 1 :(得分:1)
C中的指针使用星号声明。指针是一种原始数据类型,它包含一个变量的指针(或地址)。要访问指针指向的数据,我们再次使用星号取消引用指针。
指针可以指向{保持地址} char
数组(字符串)的第一个字符,这是您的代码段中的情况。
src++
此特定指令使指针指向数组中的下一个字符。
*src
这个结构使指针无法访问它指向的角色。
答案 2 :(得分:0)
src
指针用于提前输入以查找非数字dst
指针用于在复制非数字后提前输入'\0'
。input
指针是完整的,包含字符串的开头,这是您需要的和返回的内容这是演练:() - src指针,[] - dst指针:
{[(1)], 2, 'a', 'b', '\0'}
dst == input, src == input
{[1], (2), 'a', 'b', '\0'}
dst == input, src == input + 1
{[1], 2, ('a'), 'b', '\0'}
dst == input, src == input + 2
*dst = *src // copy because *src is not a digit
{'a', [2], 'a', ('b'), '\0'}
dst == input + 1, src == input + 3
*dst = *src // copy because *src is not a digit
{'a', 'b', ['a'], 'b', ('\0')}
dst == input + 2, src == input + 4
*src == false // no more copying, loop ends
dst* = '\0'; // terninating null added
{'a', 'b', ['\0'], 'b', ('\0')}
^ - input pointer