Итак, можем ли мы каким-то образом выводить вывод и является ли этот код законным?
Указатели увеличиваются в несколько раз по размеру, на который указывают. Когда вы добавляете 4 в p
, вы добавляете 4 * sizeof(int)
, а не только 4 байта.
Если вы пытаетесь сделать p
, укажите «следующее» целое число, увеличьте его на 1, а не 4. В противном случае p
будет указывать на память за пределами того, что вы выделили.
В самом деле, если я не ошибаюсь, ваше выделение только создает единый int
со значением 3, а не три отдельных int
S:
int* p = new int(3);
Попробуйте закомментировать p += 4;
линию, и вы должны получить «3 'как выход. Учитывая, что ответ juanchopanza выше, это место.
Вы выходите за пределы выделенного вами * единственного * целого числа. Память разыменования, которой вы не владеете, ведет к * неопределенному поведению *, что делает вашу целую программу плохо сформированной. –
Нет, и нет ..... Учитывая этот «новый» код, это не будет законным даже с 'p + = 1;' – WhozCraig