Я собирал программу на C с помощью gcc 4.7.2. Я суммирую адрес, который является типом void * с некоторым смещением. (void * + size) должен дать предупреждение. Если это не то, сколько байтов будет добавлено, если размер равен 1 &, если размер равен 50. Мое единственное беспокойство в этом случае должно быть предупреждением о том, что мы добавляем что-то к указателю пустоты?Должен ли компилятор предупреждать о арифметике указателя с указателем void?
12 int size = 50;
/*Allocate a block of memory*/
14 void *BlockAddress = malloc(200);
15 if(!BlockAddress)
16 return -1;
17 address1 = (int *)BlockAddress;
18 address2 = BlockAddress + 1*size;
19 address3 = BlockAddress + 2*size;
Благодаря
Вы можете проверить, но я думаю, что это добавит 4 байта (размер указателя), если он работает. Если вы не укажете тип, компилятор не сможет узнать, сколько байтов добавить. Например. для char 1 байт добавляется, для int pointer добавляется 4 байта и так далее. Итак, я думаю, что значением по умолчанию будет размер указателя, который равен 4 байтам. –
Да, я уже проверил его. И я думал так же, как вы думаете, если я не скомпилировал его и не запустил, эта программа скомпилирована без ошибок или предупреждений. И он добавляет 1 не 4, вот почему задал вопрос, почему это так. – Javed