Скажем, у нас есть следующий код:C указатель/массив значение путаница
typedef union {
float e[4];
__v4sf v;
float *s;
} __vec4f;
float test[12];
int main(){
__vec4f one;
printf("adrs: &one.s = 0x%x, &one.e = 0x%x\n", &one.s, &one.e);
printf("vals: one.s = 0x%x, one.e = 0x%x\n",one.s,one.e);
one.s = test;
printf("adrs: &one.s = 0x%x, &one.e = 0x%x\n", &one.s, &one.e);
printf("vals: one.s = 0x%x, one.e = 0x%x\n",one.s,one.e);
return 0;
}
При работе результаты, как следует:
adrs: &one.s = 0xbffff270, &one.e = 0xbffff270
vals: one.s = 0x927ff590, one.e = 0xbffff270
adrs: &one.s = 0xbffff270, &one.e = 0xbffff270
vals: one.s = 0x52a0, one.e = 0xbffff270
Один видит, что адрес one.s
и one.e
равны - как и ожидалось, но значений нет. Вот что меня смущает.
Под память они одинаковые, но их интерпретация совсем другая – sidyll