免费注册 查看新帖 |

Chinaunix

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

惭愧,请教一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-26 10:36 |只看该作者 |倒序浏览
我也写C程序7、8年了,但对一个很简单的问题还是不明白.
如:
int main()
{
    char str[100];
    printf("strlen=%d\n",sizeof(str));
    test(str);
    return 0;
}

int test(char *str)
{
   printf("size=%d\n",sizeof(str));
}


该程序执行的结果应该是
100
4

可在main函数中,sizeof() 是怎么是判断str被分配了100字节的,虽然str在编译链接阶段已经分配好了,但sizeof()函数是在进程运行的时候才执行的。难道str在实际的内存数据结构中还有表征其起始地址偏移和结束地址偏移吗?
在test函数中,由于str声明的变量是char *指针,故该变量大小在32位的机器中是4个字节。

[ 本帖最后由 ccjjhua 于 2006-6-26 10:48 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-26 10:44 |只看该作者
问题是什么?

论坛徽章:
0
3 [报告]
发表于 2006-06-26 10:49 |只看该作者
sizeof是怎么进行判断的

论坛徽章:
0
4 [报告]
发表于 2006-06-26 10:54 |只看该作者
你说的很明白了,str在编译链接阶段已经分配好了,所以sizeof就是在编译的时候判断的罗

论坛徽章:
0
5 [报告]
发表于 2006-06-26 11:00 |只看该作者
谢谢了,茅塞顿开

论坛徽章:
0
6 [报告]
发表于 2006-06-26 12:19 |只看该作者
看来,编译和汇编应该多学习,最近看了汇编明白了一些东西,
编译一下,gcc -S test.c,就可以看见了,分别是
pushl   $100

pushl   $4
继续努力学习汇编中

论坛徽章:
0
7 [报告]
发表于 2006-06-26 20:28 |只看该作者
在 C 中,除变长数组之外,sizeof 的结果是整型常量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP