char upper(char c)
будет функцией, которая принимает символ и возвращает символ.Если вы хотите работать со строками, соглашение состоит в том, что строки - это последовательность символов, оканчивающаяся нулевым символом.Вы не можете передать всю строку функции, поэтому передаете указатель на первый символ, поэтому char *upper(char *s)
.Указатель на указатель будет иметь два *
, как в char **pp
:
char *str = "my string";
char **ptr_to_ptr = &str;
char c = **ptr_ptr_ptr; // same as *str, same as str[0], 'm'
верхний также может быть реализован как void upper(char *str)
, но более удобно, чтобы верхний возвращал переданную строку.Вы использовали это в своем примере, когда вы printf
строка, которая возвращается в верхнем.
Так же, как комментарий, вы можете оптимизировать свою верхнюю функцию.Вы звоните strlen
за каждый i
.Строки C всегда заканчиваются нулем, поэтому вы можете заменить i < strlen(word)
на word[i] != '\0'
(или word[i] != 0
).Также код лучше читать, если вы не сравниваете 96 и 123 и вычитаете 32, но если вы сравниваете и вычисляете с 'a', 'z', 'A', 'Z' или любым другим символом, который вы имеете в виду.