char * s1 представляет строку в C. 0 представляет Acsii эквивалент '\ 0', который является окончанием строки в C. Символы и целые числа являются взаимозаменяемыми, но вы должны знать значение Ascii каждогоголец.Буква «A» эквивалентна целому числу 65 по значению Ascii.Это должно ответить на ваш вопрос о Int c.Это не имеет никакого поведенческого значения для кода.
Теперь предположим, что у вас есть строка hello и meh, у вас будет:
char * s1 = ['h', 'e','l','l','o','\0']
char * s2 = ['m', 'e', 'h','\0']
Итак, вы вызываете:
firstmatch('hello', 'meh')
temp назначено значение 'hello'.
Теперь вы вызываете
strchr('meh', 'h')
* temp в этом случае сценарий эквивалентен temp [0], который равен' h '.
В strchr,он перебирает каждую букву «meh», начиная с «m».
First iteration:
'm' == 'h' -> false therefore proceed to next letter (*s++)
Second iteration:
'e' == 'h' -> false therefore proceed to next letter (*s++)
Third iteration:
'h' == 'h' -> true therefore return a char value that is not 0.
Это возвращает нас к функции firstmatch внутри условия if.Поскольку условие if передается на третьей итерации, оно возвращает нам 'h'.
Предположим, что третья итерация не удалась, она будет увеличиваться до следующей буквы в s1, которая будет 'e', и следовать той же самойописанная выше процедура.
Наконец, (* temp! = 0) означает, что если мы встретим '\ 0' в s1 для 'привет', который мы определили выше, то он останавливает весь цикл и возвращает 0. Указание на отсутствие одинаковых букв.
Прочтите об арифметике указателей в C / C ++, если вы не понимаете, почему * temp == temp [0].Аналогично * temp ++ == temp [n + 1] (n представляет текущий символ).