Выражение x = *y++
в эффектах же, как:
x = *y;
y = y + 1;
И если выражение просто *y++;
(без назначения), то его ничего, кроме такого же, как y++;
, то есть y
начало, указывая на следующую локацию после приращение.
Второе выражение ++*y
означает для увеличения значения, на который указывает y
, что так же, как: *y = *y + 1;
(указатель не увеличивается) Это будет лучше понятно, с ответом на ваш первый вопрос:
Предположим, что ваш код:
int x = 30, *y;
int temp;
y = &x;
temp = *y++; //this is same as: temp = *y; y = y + 1;
Первый *y
будет присваиваться переменной temp
; следовательно, temp
присвоен 30
, тогда значение y
увеличивается на единицу, и оно начинается с следующего места после местоположения x
(где действительно нет переменной).
Следующий случай: Предположим, что ваш код:
int x = 30, *y;
int temp;
y = &x;
temp = ++*y; //this is same as *y = *y + 1; temp = *y;
Первое значение *y
приращений от 30
до 31
, а затем 31
присваивается temp
(примечание: x
теперь 31
).
Следующая часть Вашего вопроса (читать комментарии):
int x = 30, *y, *z;
y = &x; // y ---> x , y points to x
z = y; // z ---> x , z points to x
*y++ = *z++; // *y = *z, y++, z++ , that is
// x = x, y++, z++
x++; // increment x to 31
Подумайте о '++ * y' и' * ++ y'. –
Я вижу, что вы имеете дело с указателями, но это может помочь: http://stackoverflow.com/questions/1094872/is-there-a-difference-between-x-and-x-in-java – zztops
Разве вы не можете просто * запустить *, что программа находит свой выход? (Хорошо, если вы исправите его, чтобы не иметь неопределенного поведения сначала ...) –