打印
[综合信息]

关键字sizeof

[复制链接]
455|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AdaMaYun|  楼主 | 2024-7-30 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

不知道有多少人最初认为sizeof是一个函数。其实它是一个关键字,其作用是返回一个对象或者类型所占的内存字节数,对绝大多数编译器而言,返回值为无符号整形数据。需要注意的是,使用sizeof获取数组长度时,不要对指针应用sizeof操作符,比如下面的例子:

 void ClearRAM(char array[])  
{
     int i ;
     for(i=0;i<sizeof(array)/sizeof(array[0]);i++)     //这里用法错误,array实际上是指针  
     {
         array[i]=0x00;
     }
}

int main(void)  
{
     char Fle[20];

     ClearRAM(Fle);          //只能清除数组Fle中的前四个元素  
}

我们知道,对于一个数组array[20],我们使用代码sizeof(array)/sizeof(array[0])可以获得数组的元素(这里为20),但数组名和指针往往是容易混淆的,有且只有一种情况下数组名是可以当做指针的,那就是**数组名作为函数形参时,数组名被认为是指针,同时,它不能再兼任数组名。
**注意只有这种情况下,数组名才可以当做指针,但不幸的是这种情况下容易引发风险。在ClearRAM函数内,作为形参的array[]不再是数组名了,而成了指针。sizeof(array)相当于求指针变量占用的字节数,在32位系统下,该值为4,sizeof(array)/sizeof(array[0])的运算结果也为4。所以在main函数中调用ClearRAM(Fle),也只能清除数组Fle中的前四个元素了。

使用特权

评论回复
沙发
suncat0504| | 2024-7-30 19:52 | 只看该作者
确实如楼主所说,在传递参数时,程序中使用sizeof容易出问题。我感觉一般用作计算固定类型所占空间时,比较安全。

使用特权

评论回复
板凳
suncat0504| | 2024-7-30 19:52 | 只看该作者
做程序员看起来挺容易,实际工作中要考虑的事情很多,一个不注意,就会产生莫名其妙的错误,而且原因还不好找。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

240

主题

1800

帖子

3

粉丝