То же, что:
char char_func(char** ptr)
{
char c = **ptr; // read the current character (pointed by ptr)
(*ptr)++; // move the original pointer (ptr) to next character
if (c != '\0') // if the character in c is not the one ending the sequence
{
return c; // return that character
}
else // otherwise
{
--(*ptr); // move the original pointer back one step (back to '\0')
return **ptr; // return that last '\0' character
}
}
означает, что каждый последующий вызов возвращает следующий символ строки (последовательности символов) передается в качестве аргумента, пока символ \0
не встречается (затем он повторно возвращает этот знак \0
):
int main()
{
char tab[] = { 'a', 'b', 'c', '\0' };
char* ptr = tab;
printf("%c ", char_func(&ptr)); // a b c \0
//^
printf("%c ", char_func(&ptr)); // a b c \0
// ^
printf("%c ", char_func(&ptr)); // a b c \0
// ^
printf("%c ", char_func(&ptr)); // a b c \0
// ^
printf("%c ", char_func(&ptr)); // a b c \0
// ^ ^=ptr
return 0;
}
Выход:
a b c \0 \0