Прежде всего, я предполагаю, что ваши звонки на printf
должны отображать значения x
, y
и z
или адреса из a
, b
и c
, верно? В этом случае вам нужно изменить их на:
printf("%p\n", x);
printf("%p\n", y);
printf("%p\n", z);
Они будут учитывать размер указателя на вашем процессоре, если он отличается от размера int
. Они также будут печатать адрес в шестнадцатеричном формате, что гораздо более распространено, поскольку адреса могут быть довольно большими.
и после увеличения
значение указателя равно 65526 (как 2
приращение для целого)
Предполагается, что вы находитесь на платформе, где int
равен 2 байтам (на большинстве современных домашних ПК int
сейчас, вероятно, равен 4).
тогда если в этом случае будет новый
адрес указателя перезаписать содержимое
предыдущего адреса и какое значение
содержаться по новому адресу
...... помогите
Вы на самом деле не разыграли ни одного из указателей здесь. Таким образом, память, занятая a
, b
и c
, остается нетронутой; все, что вы сделали, изменили то, на что указывают x
, y
и z
. Если бы вы стали разыменовывать один из указателей после его увеличения, вы бы изменили память после переменной, на которую она первоначально указала. Таким образом, если a
находится по адресу 65526 десятичного и int
2 байта:
int *x = &a; // x points to the integer at "65526" (a)
x++; // x points to the integer at "65528", a is still at 65526
*x = 5; // you've just modified the memory at addresses 65528 and 65529.
Если 65528 или 65529 содержали некоторые другие важные данные (например, b
или c
), вы только что испортили состояние вашей программы.