Der Kommentar in der ersten Zeile erklärt alles. Das Array all
ist in Blöcke von 100 Zeichen unterteilt, und das Argument j
gibt an, aus welchem Chunk das Muster zu suchen ist. Die strncmp
wird auf alle Positionen beginnend am Anfang des j
ten Chunks bis zum Ende des Arrays angewendet. Der Rückgabewert ist der Offset des Zeichens, in dem das Muster relativ zum Anfang des j
ten Chunks gefunden wird.
Was (all+j*100)+i
macht?
Die j*100
erhält den Index des ersten Elements der j
th Stück des Arrays. Das heißt, wenn j
2 ist, erhält es 200, was der Index des ersten Elements des zweiten Chunks ist (der Chunk am Anfang ist der zeroth Chunk).
all+j*100
ist die gleiche wie &all[j*100]
, so ist es nur den Zeiger auf das Element immer (oder den Anfang des Blocks) über die wir gesprochen, in diesem Fall &all[200]
.
Schließlich wird die +i
wird Inkrementieren des Zeigers durch i
und als i
ist der Iterator der Schleife wird zunächst der Eingang strncmp()
passieren &all[200]
sein, und dann &all[201]
und dann &all[202]
und so weiter, bis das Muster gefunden wird, oder Das Ende des Arrays erreicht.
Die Wahl des Literals 100 und seine Verwendung, um das Array in Stücke zu unterteilen, scheint eine Wahl zu sein, die vom Programmierer der Funktion getroffen wurde. Es ist wirklich nicht erforderlich, Sie könnten die Funktion immer mit j=0
aufrufen und die Suche nach dem Muster würde normal ausgeführt werden, ohne diese 100 für irgendetwas zu verwenden. Aber der Programmierer wusste wahrscheinlich, dass die Muster in seinen Arrays immer ein paar hundert Zeichen in dem Array gefunden wurden, so dass er dem Anrufer die Möglichkeit gab, nach dem Muster zu suchen, das die Anordnung schneller findet.
Beispiel - Stellen Sie sich eine wörtliche 5 statt 100 der Einfachheit halber mit:
arr = "abcdefghijklm";
pat = "gh";
Wenn das Argument als j=0
geben wird, wird der erste strncmp
in der Schleife mit &arr[0]
suchen aufgerufen werden an der 'a'
Zeichen, die zweite mit &arr[1]
Blick auf 'b'
und so weiter, bis das Muster gefunden wird. Es wird auf 'g'
(&arr[6]
) gefunden werden, so dass die Rückkehr 6
sein wird.
Wenn das Argument als j=1
übergeben wird, wird die erste strncmp
in der Schleife mit &arr[5]
am 'f'
Zeichen suchen aufgerufen werden, der zweite mit Blick auf &arr[6]
'b'
wo das Muster gefunden wird, und so wird 1
zurückgegeben werden.
Ich habe dieses Gefühl, dass Sie die Person fragen sollten, die 'PatternSearch' implementiert hat. Das heißt, sein Kommentar ist ziemlich klar. –
Es ist ein verschleierter Weg, die Funktion 'char (* all) [100]' zu nehmen und 'all [j] [i]' in der Schleife zu verwenden. –