Значение мусора при увеличении пустоты * - PullRequest
3 голосов
/ 26 мая 2011

Этот код:

#include <stdio.h>
int main(void)
{
   void *ptr;
   int arr[] = {1,2,3,4,5};
   ptr = arr;
   ptr++;
   printf("%d",*(int*)ptr);
}

Печатает некоторое значение мусора, но я ожидал, что оно напечатает 2. Почему не печатается 2?

Ответы [ 3 ]

5 голосов
/ 26 мая 2011

Вы не можете выполнять арифметику с указателем на пустом указателе, потому что компилятор не имеет никакого представления о размере указанных объектов.

Ваш код не компилируется на Comeau Online.Это еще одно злое расширение gcc, я думаю.

4 голосов
/ 26 мая 2011

Некоторые компиляторы C обрабатывают арифметику пустых указателей так же, как и символы *.Это недопустимо в C ++.

Неважно, вы действительно должны только увеличивать не пустые указатели, поскольку арифметика указателей зависит от знания размера и выравнивания типа данных.

0 голосов
/ 26 мая 2011

try

int *ptr

ptr ++ увеличивается на величину int в этом случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...