Я изучаю C, и я столкнулся с приведенным ниже кодом, который реализует конкатенацию, но я изо всех сил пытаюсь понять вторую часть, несмотря на пересмотр приоритета указателя / приращения и ассоциативности.
Я выполнил примеры всех различныхкомбинации разыменования и пост / преинкремента, и теперь напоминаем, что преинкремент с разыменованием является ассоциативным справа налево, например * ++ q , где inc будет происходить первым.Страница, на которой я узнал, гласит, что постинкремент с оператором разыменования имеет приращение как более высокий приоритет и далее говорит, что ассоциативность этого примера слева направо.Я не знаю, почему в нем упоминается ассоциативность, поскольку я понимаю, что приоритет рассматривается перед тем, как, например, * p ++ будет увеличиваться до его разыменования.
Приведенный ниже код начинается с рекурсивного вызова себя с пре-инком для dest, чтобы добраться до конца строки назначения, которая обозначается как достижение и разыменование нулевого байта.На этом этапе я теряю трек, потому что я думал бы, что это просто разыменованное dest для разыменованного src, однако он публикует его инкремент, который на основе того, что я узнал, будет увеличиваться в ячейку памяти после разыменования нулевого байта и переходить кприсвойте строку "eeksfor" положению над нулевым байтом в dest.Это не только смущает меня, но и программа продолжает вызывать себя в другом троичном операторе / возвращает 0, казалось бы, без причины.
Спасибо
/* my_strcat(dest, src) copies data of src to dest. To do so, it first reaches end of the string dest using recursive calls my_strcat(++dest, src). Once end of dest is reached, data is copied using
(*dest++ = *src++)? my_strcat(dest, src). */
void my_strcat(char *dest, char *src)
{
(*dest)? my_strcat(++dest, src): (*dest++ = *src++)? my_strcat(dest, src): 0 ;
}
/* driver function to test above function */
int main()
{
char dest[100] = "geeksfor";
char *src = "geeks";
my_strcat(dest, src);
printf(" %s ", dest);
getchar();
}
Я запустил программу, и она делает то, чтоэто ожидается сделать.То есть он возвращает строку "geeksforgeeks" так ясно, что я просто чего-то не понимаю