美文网首页
关于sizeof

关于sizeof

作者: 黄_龙 | 来源:发表于2019-06-10 14:17 被阅读0次

    C语言sizeof关键字–不是函数!

    sizeof是关键字不是函数,就算不知道它是否为32 个关键字之一时,我们也可以借助编译器确定它的身份。来看看下面几种情况:

    A),sizeof(int); B),sizeof(i); C),sizeof int; D),sizeof i;

    32位系统下:

    首先很明显A、B都是4.那么C和D呢?

    我们用Visual C++6.0或者其他编译器来试下:

    C报错syntax error : ‘type’

    但是D输出结果也是4.

    sizeof后面没有括号也是可以的,但是函数后面是不能没有括号的,所以sizeof绝不是函数。

    不是说sizeof 是个关键字,其后面的括号可以没有么?那你想想sizeof int 表示什么啊?int 前面加一个关键字?类型扩展?明显不正确,我们可以在int 前加unsigned,const 等关键字但不能加sizeof。好,记住:sizeof 在计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。一般情况下,咱也别偷这个懒,乖乖的写上括号,继续装作一个“函数”,做一个“披着函数皮的关键字”。

    接下来我们来看看下面这几个表达式的值:(32位系统下)

    int *p = NULL;             //这里不要写成Null,或者null

    sizeof(p)是多少?

    sizeof(*p)是多少?

    解答:

    sizeof(p)表示的是指针本身所占空间大小,32位下为4.

    sizeof(*p)表示的是指针所指数据类型所占的大小,整型,也为4.

    int   a[100];

    sizeof(a)、sizeof(a[100])、sizeof(&a)、sizeof(&a[0])的值分别是多少?

    解答:

    首先sizeof(a)很明显是整个数组的大小,所以是400

    sizeof(a[100]) 为4,a[100]是表示第100个元素的下一个元素,使用sizeof(a[100])不会出错的原因是sizeof 是关键字不是函数。函数求值是在运行的时候,而关键字sizeof求值是在编译的时候。虽然并不存在a[100] 这个元素,但是这里也并没有去真正访问a[100], 而是仅仅根据数组元素的类型来确定其值。

    sizeof(&a)为4,表示存储地址空间大小,在Visual C++6.0下输出为400,可能编译器把a和&a等同起来了,虽然他们的值是一样的,但是意义不一样。

    sizeof(&a[0]) 取第一个元素的地址,也是4。

    int b[100];

    void fun(int b[100])

    {

    sizeof(b);// sizeof (b) 的值是多少?

    }

    解答:

    还是为4,其实数组作为参数时,int b[100]和int b[]没区别,也就相当于int *b 。所以sizeof(b) 就是指针的大小。

    转自:http://www.blogfshare.com/sizeof-not-function.html

    相关文章

      网友评论

          本文标题:关于sizeof

          本文链接:https://www.haomeiwen.com/subject/barzxctx.html