ОК, я попытаюсь объяснить это как можно проще.
Когда вы это сделаете: putchar (* pch ++), что вы говорите, «напечатайте этот символ адреса, на который указывает pch, а затем увеличивайте pch, чтобы указать на следующий адрес». По существу, перед первым putchar(), * pch = 'a' и после * pch = 'b' (потому что pch теперь указывает на ch [1]).
Теперь, во втором putchar(), что вы говорите: 'напечатайте символ в адресе, на который указывает pch, а затем увеличивайте значение CHARACTER по этому адресу на 1'. Итак, вместо того, чтобы делать то, что вы делали во втором putchar(), вы могли бы заменить эту строку на эти две строки:
putchar(*pch); // 'b' *pch += 1; // see, you increment the value(notice the *), not the pointer.
Однако, поскольку, как я уже сказал, он увеличивает знак ПОСЛЕ второго putchar(), он просто печатает то, что было, что «b». Итак, просто чтобы очистить, после второго putchar(), ch [0] = 'a' (мы ничего не изменили в этом значении) и ch [1] = 'c' (мы увеличили значение символа на 1 и 'b' + 1 = 'c'). Остальное не изменилось, поэтому ch [2] = 'c', ch [3] = 'd' и т. Д. Но pch указывает на ch [1]
Теперь, в третьем putchar(), вы что-то делаете аналогично с первым исключением того, что вы первый увеличиваем адрес, PCH точки, а затем напечатать значение этого address.So, вы могли бы заменить третье putchar() с этими двумя линиями:
pch++; // increment the pointer by one, it now points to ch[2], which is 'c'(it remained unchanged) putchar(*pch); // 'c'
Таким образом, после третьего putchar(), ch [0] = 'a' (осталось неизменным), ch [1] = 'c' (изменено во втором putchar()), ch [2] = 'c' (осталось неизменным)
Наконец , в последнем putchar() то, что вы делаете, похоже на второе, за исключением того, что вы увеличиваете значение CHARACTER, которое указывает pch, прежде чем вы его распечатываете. Помните, что PCH указывает на сп [2] Таким образом, вы могли бы заменить последнюю putchar() с этими двумя линиями:
*pch += 1; // 'c' + 1 = 'd' putchar(*pch); // 'd'
Итак, после 4 putchars, ч [0] = 'а' (он остался неизменным), ch [1] = 'c' (изменено во втором putchar()), ch [2] = 'd' (изменено в четвертом putchar()) и ch [3] = 'd' (он остался неизменным), а остальная часть строки остается неизменной, и я думаю, теперь очевидно, почему вы получаете результат, полученный от printf().
Домашнее задание :( –
«Если вы действительно плохи с помощью указателей», я предлагаю серьезно сесть и получить книгу K & R, прочитать ее, прочитать, если вы все еще не получите ее, отлаживаете зайдите в него, посмотрите на значения указателей, продолжайте перечитывать их, пока не получите момент лампочки. C преуспевает в силе и простоте указателей. – t0mm13b