Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        4年前关闭。
                                                                                            
                
        
具体来说,我想遍历从输入pat = "aab"string = "ababbaabaa"开始的算法。我在弄清楚嵌套的for循环中发生的事情时遇到了麻烦,因为我不太精通C。该函数如下所示:

int nfind(char * string, char * pat){
  int i = 0, j = 0, start = 0;     //
  int lasts = strlen(string) - 1;  //
  int lastp = strlen(pat) - 1;     //
  int endmatch = lastp;            //

  for (i = 0; endmatch <= lasts; endmatch ++, start ++){ //
    if (string[endmatch] == pat[lastp]){
    for (j = 0, i = start; j < lastp && string[i] == pat[j]; i ++, j++)
    ;
  }
  if (j == lastp)
    return start;
  }
  return -1;
}


因此,当函数最初被调用时,我们将具有i=j=start=0lasts=9lastp=2endmatch=2

endmatch < lasts开始,我们运行for循环。我不确定if (string[endmatch] == pat[lastp])行的含义。我熟悉if语句,但是我不确定他们是否在问if endmatch == lastp或它是否与字符数组有关。在这里的任何帮助,将不胜感激。

最佳答案

也许您的理解难题来自对C语言中字符串的缺乏了解。

使用[]方括号运算符可以访问索引处的元素。
这是写*(pointer + index)的简写。它使用指针算术来查找将为pointer + index * sizeof(subscript type)的地址,并通过取消对指针的引用来直接(参考)访问该元素。

C中的字符串主要表示为以NULL字符结尾的字符数组。因此,pat[lasstp]是字符串char中位置lastppat类型。

注意:
需要注意的是,char array[20];char* pointer = __alloca(20);之间(或从堆栈中获取空间的确切方法)有所不同。我只想指出一个数组类型与数组类型“衰减”到指针类型之间的区别,只要数组类型不合适,编译器认为指针是可以使用的东西。
参考:Arrays decaying into pointers
What is array decaying?
但是,这是一个非常微妙的细节,您今天的问题更为基本。

关于c - C语言中的迭代函数有什么作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35261221/

10-11 19:04