Скажем, у нас есть следующий код:
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 (своего рода кастинг) делает эту причуду?