全部博文(153)
分类:
2009-06-22 13:03:59
最近在看
1、void Func ( char str[100])
{
请计算
sizeof( str ) = 4 (2 分)
}
2、char str[100 ] = {0} ;
char *p = str ;
int n = 10;
请计算
sizeof (str ) = 100 (2 分)
sizeof ( p ) = 4 (2 分)
sizeof ( n ) = 4 (2 分)
3、void *p = malloc( 100 );
请计算
sizeof ( p ) = 4 (2 分)
其实大部分还是很好理解的,但是对于1、和2中的第一小问我刚开始被纳闷到了,同样都是对数组的首地址取sizeof,怎么会两者截然不同,开始我还怀疑
Char str[100];
sizeof是个编译器常量,当程序执行到这里的时候,编译器在编译阶段己经知道他的长度了,会把它的长度记录, sizeof是C中的一个操作符,是语言层面的功能,这个计算结果是在编译时完成的,就是说编译器看到这个语句,它就会用100这个常数去替换,因此 生成的的汇编代码里有它的长度!
当数组名作为参数传递时,会退化为指同类型的指针! 也就是说此事在1、中的str已经只是一个地址了,所以当然是4了,这也是为什么我们传递数组的时候除了给他首地址还要给它数组的大小的缘故。
chinaunix网友2009-07-02 13:35:09
char是只占用一个字节,但是它的地址是32位的。int占用4个字节,但它的地址也是32位的,而且是横跨了4个地址的,这也是为什么int型地址要是4的倍数的
chinaunix网友2009-07-02 13:31:36
我认为说法是一样的。 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。