免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3610 | 回复: 11
打印 上一主题 下一主题

sizeof(&arrayname)是多少 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-11 15:03 |只看该作者 |倒序浏览
#include <stdio.h>



int main() {
        int f[3];
    printf("%d\n", sizeof(&f));

}

vc++.net居然是12,gcc是4,似乎gcc是对的,哪位能评判一下?

论坛徽章:
0
2 [报告]
发表于 2008-04-11 15:12 |只看该作者

回复 #1 baozhao 的帖子

和编译器有关吧
sizeof()应该是程序执行之前已经算好了


楼下继续

[ 本帖最后由 wantjutju 于 2008-4-11 15:17 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-04-11 15:25 |只看该作者
&f 是一个指针类型. 在32位机上为4.

论坛徽章:
0
4 [报告]
发表于 2008-04-11 16:42 |只看该作者
#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 就不正常了......

论坛徽章:
0
5 [报告]
发表于 2008-04-11 17:02 |只看该作者

回复 #4 haohao06 的帖子

总结得不错, 不过我觉得有一点可能需要讨论一下:
>>而且我覺得這里b[0]和&a的類型應該一致

b[0]应该是与a的类型一致.
b[0]是int*
a也是int*

&a就是你说的 int (*)[5];

论坛徽章:
0
6 [报告]
发表于 2008-04-11 17:06 |只看该作者
原帖由 baozhao 于 2008-4-11 15:03 发表
#include



int main() {
        int f[3];
    printf("%d\n", sizeof(&f));

}

vc++.net居然是12,gcc是4,似乎gcc是对的,哪位能评判一下?



vc++.net计算出的是sizeof(f[3])=4*3=12
gcc 下计算出的是sizeof(int*)=4

论坛徽章:
0
7 [报告]
发表于 2008-04-11 17:27 |只看该作者
vc 2008 出来是 4

论坛徽章:
0
8 [报告]
发表于 2008-04-11 18:12 |只看该作者
用VS2005计算出来确实是12,Bug?

论坛徽章:
0
9 [报告]
发表于 2008-04-11 18:20 |只看该作者
找到了,是VS2005的Bug,在这里,VS2005SP1已经修复此Bug
http://connect.microsoft.com/Vis ... x?FeedbackID=101702
由 Microsoft 在 2006/1/26 12:38 发送
Thank you for submitting this issue. The bug has been resolved Fixed, and its resolution shipped as part of Visual Studio 2005 Service Pack 1 (SP1).

论坛徽章:
0
10 [报告]
发表于 2008-04-11 18:52 |只看该作者

回复 #9 tyc611 的帖子

非常谢谢,该问题圆满解决!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP