Этот код:
#include <stdio.h> int main(void) { void *ptr; int arr[] = {1,2,3,4,5}; ptr = arr; ptr++; printf("%d",*(int*)ptr); }
Печатает некоторое значение мусора, но я ожидал, что оно напечатает 2. Почему не печатается 2?
2
Вы не можете выполнять арифметику с указателем на пустом указателе, потому что компилятор не имеет никакого представления о размере указанных объектов.
Ваш код не компилируется на Comeau Online.Это еще одно злое расширение gcc, я думаю.
Некоторые компиляторы C обрабатывают арифметику пустых указателей так же, как и символы *.Это недопустимо в C ++.
Неважно, вы действительно должны только увеличивать не пустые указатели, поскольку арифметика указателей зависит от знания размера и выравнивания типа данных.
try
int *ptr
ptr ++ увеличивается на величину int в этом случае