Использование двух операторов приращения в одном операторе, которые не зависят друг от друга, приводит к неопределенному поведению, потому что компилятор свободен выбирать, какое приращение делать первым (или, скорее, вы не дали компилятору подсказки, какой делать первым).
В любом случае, если вы ожидаете h h
, также неправильно писать *(arr++)
дважды, потому что они будут выполняться оба, увеличивая arr
в два раза - и такбудут напечатаны два разных символа (arr[0]
и arr[1]
).
Другая ошибка заключается в использовании постинкремента, который приведет к увеличению arr
после выборки символа,поэтому он выведет T
, а не h
.
Таким возможным решением является этот код, использующий дополнительную переменную:
#include <stdio.h>
int main()
{
char *arr = "This is to test";
char c = *(++arr);
printf("\n%c %c ", c, c);
return 0;
}
В этом коде arr
будет толькоувеличивается на один раз, и символ, выбранный в этой позиции, может быть использован позже.