C 为什么我在某些地方使用*而在某些地方没有使用
所以我无法理解C中的指针代码。基本上它从字符串中删除数字。我很困惑为什么有些地方使用*src,有些地方不使用。另外,请解释一下这段代码是如何工作的C 为什么我在某些地方使用*而在某些地方没有使用,c,string,pointers,C,String,Pointers,所以我无法理解C中的指针代码。基本上它从字符串中删除数字。我很困惑为什么有些地方使用*src,有些地方不使用。另外,请解释一下这段代码是如何工作的 char* RemoveDigits(char* input) { char* dest = input; char* src = input; while(*src) { if (isdigit(*src)) { src++; continue; } //here we are
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;
}
指针用于推进输入以查找非数字src
指针用于在将非数字复制到输入后推进输入dst
- 由于结果字符串等于或小于原始字符串,因此在末尾添加了空终止符
'\0'
指针是完整的,包含字符串的开头,这是您需要的,也是返回的输入
{[(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
C中的指针是用星号声明的。指针是一种基本数据类型,它保存指向变量的指针对象(或地址)。为了访问指针指向的数据,我们再次使用星号取消引用指针
指针可以指向
char
数组(字符串)的第一个字符(保存地址),这是代码段中的大小写。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;
}
要理解这段代码,您需要了解字符数组在C中的工作方式。
如果您声明“char[5]example=“test”变量“example”将是指向数组第一个字符的指针,这意味着它将包含存储“t”字符的内存地址
如果你输入“*example”,你基本上是说“给我存储在变量“example”中指定的内存地址的值”,这实际上意味着“给我第一个字母”,事实上,如果你输入printf(“%c”,example),它将显示“T”
一旦您理解了这一点,就很容易猜到,通过说“example++”,您将从“T”的地址更改为内存“E”中的下一个值,依此类推
现在让我们转到另一点,while是如何工作的?
一旦您了解了如何在C中管理字符数组,就很容易理解这一点。每个存储的字符数组都始终带有“\0”字符。如果放入while语句中,每个字符都将被视为“true”,但“/0”将被视为“false”。通过检查存储在src中的值并在你是说“检查所有角色直到结束”
最后一件事:如果当前字符“*src”是一个数字字符,只需传递到下一个字符并重新启动,而不执行下面的代码,否则如果它是一个相关字符,则将其写入目标数组“*dest=*src”,然后递增“dest++”和“src++”,为下一个字符准备空间
我第一次知道这有点复杂,如果你需要更多帮助,请发表评论。无论如何,在互联网上有很多很好的教程。while(*src)给出了什么以及为什么我必须结束*dest=\0”。请解释这段代码是如何工作的。“这不是一个问题。在我看来,在没有基础知识的情况下,通过挑选代码位来学习C语言是无效的,甚至可能是有害的。我建议看一看:-)指针只是一个变量,它将其他对象的地址作为它的值。换句话说,指针指向可以找到其他内容的地址。例如,
inta=5
将立即值5
存储为其值int*b
创建指向int
和b=&a
存储a
的地址(其中当前存储的是5
)作为其值。如果需要存储在地址b
指向的值,可以使用一元'*'
运算符取消引用b
,例如int c=*b代码>将初始化c=5
)。