int arr[4] = {4,5,6,3};
float * b =(float*)arr;
int * b1 = (int*)arr;
cout << b + 1<<" "<< b1+1<<" "<<b1[1]-b[1]<<endl;
Я не понимаю,почему мы присваиваем указателю типа float указатель на int-массив и когда мы прибавляем ему единицу он прибавляется на sizeof(int) а не sizeof(float),ведь тип указателя float а не int.Я думал адресная арифметика считается относительно базового типа указателя.
И почему b1[1]-b[1] возвращает 5 а не 0?
sizeof(int) != sizeof(float)? "почему b1[1]-b[1] возвращает 5 а не 0" Может вы хотели написать&b1[1]-&b[1]? Но еще нужно будет касты добавить. – HolyBlackCat Apr 08 '20 at 23:355.fвряд ли хранится в памяти в том же виде, что и5(вот тут можно почитать про представление чисел с плавающей точкой). Плюс,b1[1]вообще нарушает strict aliasing и вызывает неопределенное поведение. – HolyBlackCat Apr 08 '20 at 23:47b1[1]илиb[1]? – Harry Apr 09 '20 at 03:45bконечно... – HolyBlackCat Apr 09 '20 at 09:53