2015-04-26 4 views
0

У меня есть массив C следующим образом:Выросшие указатель массива в C

unsigned long arr[10]; 

На моей машине unsigned long составляет 8 байт. У меня есть ситуация, когда я пишу 4 байта с помощью arr [0], а затем вам нужно найти адрес следующего байта в массиве.

void * ptr = arr[0] + (sizeof(unsigned long)/2); 

Будет ли работа выше?

+1

он будет работать на вашей машине, но не определено поведение/не будет работать в других системах. Размеры типов зависят от реализации в c. – Julius

+0

Вы пытаетесь всегда продвигать указатель на 4 байта или пытаетесь всегда продвигаться на половину длины без знака? – merlin2011

+0

К половине размера неподписанного длинного – Jake

ответ

5

Нет, это не так. Сначала вы должны набрать char*, а затем выполнить арифметику указателя.

void * ptr = ((char*) &arr[0]) + (sizeof(unsigned long)/2); 
+0

Кажется, что OP хочет продвинуться на половину размера 'unsigned long'. Вы должны сделать 'sizeof (unsigned long)/2' для учета случаев, когда' sizeof (unsigned long) 'не 8 байтов. – phantom

Смежные вопросы