[英]C pointers and arrays
在这段代码中,除了main之外,我还有一个函数,该函数在字符串(句子)中查找特定字符并返回指向它的指针,否则返回NULL:
char *position (char letter, char *sentence){
int i=0;
while (*(sentence+i) != '\0') {
if (toupper(*(sentence+i)) == toupper (letter))
return (sentence+i);
++i;
}
return NULL;}
我在这里很清楚。
在主要功能中,我必须使用上一个功能(位置)来查找特定字母在特定句子中出现了多少次。
int main (void){
char sentence [200+1];
char letter;
char *pos = sentence;
int counter=0;
gets(sentence);
scanf("%c", &letter);
while (pos != NULL){
pos = position (letter, pos);
if (pos != NULL){
++counter;
pos +=1;
}
}
return 0;
}
我不清楚的是,一旦设置了pos变量后,它到底是什么?最后的while循环如何工作?
编辑:忘记在function()
初始化变量i
,谢谢指出
让我们举一个小例子:您有字符串“ abaab”,并且正在寻找字母b。 如您所知,C字符串始终以'\\ 0'结尾。 因此,一开始您的pos代表整个字符串。
abaab\0 //pos represents ="abaab"
|
pos
之后,调用函数:postiton(pos,'b')。 Pos现在指向第二个字母。 并且,此pos仅代表较小的字符串“ baab”。
abaab\0 //pos represents="baab"
|
pos
++ pos之后; 您遇到这种情况:(pos代表较小的String)
abaab\0 //pos represents ="aab"
|
pos
现在,当您再次调用位置函数时。 pos将指向下一个“ b”。 当然,字符串会再次变短。
abaab\0 //pos represents ="b"
|
pos
递增排名:
abaab\0 //pos represents =""
|
pos
再次调用position函数将返回NULL,因为没有'b'。 当此函数返回NULL时,while函数完成。
我不清楚的是,一旦设置了pos变量后,它到底是什么?最后的while循环如何工作?
您的代码包含许多错误,但是如果您的问题仅是我引用的内容,则简单的答案是:
pos
是sentence
字符串中的指针。 开始指向sentence
指向的位置,然后移至字符串的末尾。
position()
以起点为起点,返回找到letter
的点,否则返回NULL
:因此,当您编写pos = position (letter, pos);
pos
移至letter
位置。 之后pos +=1;
您将移至下一个元素(移动一个字符的指针)。 当有任何字母position()
返回NULL
, while
循环终止。
pos用char *pos = sentence;
初始化char *pos = sentence;
由于数组在大多数表达式中都“衰减”到了指针,因此它使其指向sentence
的第一个字符,就像这样。 之后,它指向sentence
内部的元素,因为position()
返回的sentence+i
是句子的第一个元素的地址加上偏移量i。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.