Chinaunix首页 | 论坛 | 博客
  • 博客访问: 503849
  • 博文数量: 68
  • 博客积分: 5011
  • 博客等级: 大校
  • 技术积分: 806
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-30 22:06
文章分类
文章存档

2011年(1)

2009年(8)

2008年(59)

我的朋友

分类: C/C++

2008-07-15 16:31:21

#include
void fun( char str[] )
{
         printf("fun:%d-%d\n",sizeof(
str),sizeof(str[0]));
}
int main()
{
         char str[] = "aBcDe";
         fun( str );
         printf("main:%d-%d\n",sizeof(
str),sizeof(str[0]));
         return 0;
}
结果:
fun:4-1
main:6-1
函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此 sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
注:在fun()函数中,str是指针,在32位机4位空间。

unsigned short a,b;
a=(16>>1)%256;
b=(256>>1)%256;
猜猜结果多少,对就是 8,128(仅参考)
今天在写这个位运算一直有这样的错误,
expected expression before ')'token;
后来突然明白位运算2位运算符,把>>1添加1就OK了。
首先是把16,256转换成二进制的数然后整体向右移动一位,第一位补0。
关于C语言乘法,除法也是通过移位实现的。在优化程序的时候不防考虑下用
位运算符,因为加,减,乘,除,求余都是通过位运算实现的。
注意:位运算最好是unsigned(无符号整形)。

阅读(2003) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~