Скажем, у нас есть следующий код:
int main(){
int a[3]={1,2,3};
printf(" E: 0x%x\n", a);
printf(" &E[2]: 0x%x\n", &a[2]);
printf("&E[2]-E: 0x%x\n", &a[2] - a);
return 1;
}
При компиляции и запуске результаты следующие:
E: 0xbf8231f8
&E[2]: 0xbf823200
&E[2]-E: 0x2
Я понимаю результат & E [2], который равен 8 плюс адрес массива, поскольку индексируется по 2 и типа int (4 байта на моей 32-битной системе), но я не может понять, почему последняя строка равна 2 вместо 8?
Кроме того, какой тип последней строки должен быть - целым или целым указателем?
Интересно, является ли это системой типа C (kinda casting), которая делает эту причуду?