繁体   English   中英

C指针和数组

[英]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循环如何工作?

您的代码包含许多错误,但是如果您的问题仅是我引用的内容,则简单的答案是:

possentence字符串中的指针。 开始指向sentence指向的位置,然后移至字符串的末尾。

position()以起点为起点,返回找到letter的点,否则返回NULL :因此,当您编写pos = position (letter, pos); pos移至letter位置。 之后pos +=1; 您将移至下一个元素(移动一个字符的指针)。 当有任何字母position()返回NULLwhile循环终止。

pos用char *pos = sentence;初始化char *pos = sentence; 由于数组在大多数表达式中都“衰减”到了指针,因此它使其指向sentence的第一个字符,就像这样。 之后,它指向sentence内部的元素,因为position()返回的sentence+i是句子的第一个元素的地址加上偏移量i。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM