#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(无符号整形)。
阅读(2041) | 评论(0) | 转发(0) |