sizeof

(转载)写的非常好

sizeof常年被人误认为函数

作用:计算数据所占空间大小

sizeof 是关键字不是函数,其实就算不知道它是否为 32 个关键字之一时,我们也可以
借助编译器确定它的身份。看下面的例子:
inti=0;
A),sizeof(int); B),sizeof(i); C),sizeof int; D),sizeof i;
毫无疑问,32 位系统下 A),B)的值为 4。那 C)的呢?D)的呢?

在 32 位系统下,通过 Visual C++6.0 或任意一编译器调试,我们发现 D)的结果也为 4。
咦?sizeof 后面的括号呢?没有括号居然也行,那想想,函数名后面没有括号行吗?由此轻
易得出 sizeof 绝非函数。
好,再看 C)。编译器怎么怎么提示出错呢?不是说 sizeof 是个关键字,其后面的括号
可以没有么?那你想想 sizeof int 表示什么啊?int 前面加一个关键字?类型扩展?明显不
正确,我们可以在 int 前加 unsigned,const 等关键字但不能加 sizeof。好,记住:sizeof 在
计算 变量所占空间大小时,括号可以省略,而计算 类型( 模子)大小时不能省略。一般情况下,
咱也别偷这个懒,乖乖的写上括号,继续装作一个“函数”,做一个“披着函数皮的关键字”。
做我的关键字,让人家认为是函数去吧。

char *p = NULL;
sizeof(p)的值是多少?(所有的指针都为4)
sizeof(*p)呢?(取内容,1)

char a[100];
sizeof (a) 的值是多少?(100*1=100)
sizeof(a[100])呢?(第100个char型所以为1)
sizeof(&a)呢?(此为取地址,是一个指针,4)
sizeof(&a[0])呢?(同上。4)

char b[100];
void fun(char b[100])
{
sizeof(b);// sizeof (b) 的值是多少?(4)
}

扩展

strlen:
求字符串的实际长度(遇到第一个’\0’结束。不包括’\0’)

函数原型

int strlen(const char *str)
{
    int len = 0;
    assert(str != NULL);
    while(*str++)
    {
        len++;
    }
    return len;
}

思考

char buf[] = "hello ";//(hello后有个空格)
strlen(buf);//是多少,看定义(包括空格)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值