Это не Undefine поведение
когда вы объявили * а, а указывает на ячейку памяти, *b = a++
; b указать то же место, что и a, AND. a указать точку 1, которая больше, чем предыдущее местоположение, на которое указывает b.
b - a = -1
// правильно
я дам пример
int main(void)
{
int *a; // 0x408
int *w = a++; // 0x400
int *b = a++; // 0x404
int c = (b-a);
printf("%d\n",b-a);// -1
printf("%d\n",w-a); // -2
return 0;
}
я intruduce w
лучше ilustrate
Адрес памяти во время выполнения этой переменной будет выглядеть примерно так выше.
b - a
(0x404 - 0x408) == -1 (-4);
sizeof int (в данном случае) - 4 байта.и указатели, держащие адрес междунар будет иметь изменение их адрес (+/-) на коэффициент 4, , насколько это ИНТ беспокойство в этом случае 4 байта содержат один целое число (1 единица)
w - a == (0x400 - 0x408) = -2(-8)
если у вас есть
a - w == (0x408 - 0x400) = 2(8)
Что у вас? –
Поскольку 'b = a ++' присваивает 'a'' b', а затем увеличивает 'a' (что не влияет на' b'). – Cairnarvon
Подсказка: 'printf ("% d \ n ", b-a);'? Cm'on, вы знаете, остальные, :) –