Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
4年前关闭。
具体来说,我想遍历从输入
因此,当函数最初被调用时,我们将具有
从
想改善这个问题吗?添加详细信息并通过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=0
,lasts=9
,lastp=2
和endmatch=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
中位置lastp
的pat
类型。
注意:
需要注意的是,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