- 论坛徽章:
- 0
|
#include <stdio.h>
int main()
{
int a[] = {555, 666, 777, 888, 999};
printf("sizeof(a) = %u, sizeof(&a) = %u\n", sizeof(a), sizeof(&a));
printf("a = %u, &a = %u\n", a, &a);
printf("(a + 1) = %u\n(&a + 1) = %u\n(&a + 1) - &a = %u\n", (a + 1), (&a + 1), (unsigned int)(&a + 1) - (unsigned int)&a);
int b[][3] = {
{111, 222, 333},
{111, 222, 333}
};
printf("sizeof(b[1]) = %u\n", sizeof(b[1]));
printf("b[0] = %u\n", b[0]);
printf("b[1] = %u\n", b[1]);
return 0;
}
|
gcc 3.4結果如下
sizeof(a) = 20, sizeof(&a) = 4
a = 3219479216, &a = 3219479216
(a + 1) = 3219479220
(&a + 1) = 3219479236
(&a + 1) - &a = 20
sizeof(b[1]) = 12
b[0] = 3219479184
b[1] = 3219479196
a可以認為是指向int的指針而&a的類型則是int (*)[5];
而且我覺得這里b[0]和&a的類型應該一致(應該是b[][5],懶得改了).既然b[0]的sizeof可以解釋為指向目標的大小.那么vc把&a的size解釋為指向目標的size也是可以理解的.當然如果是int (*c)[5] = &a; sizeof(c)還是20 就不正常了...... |
|