新标准下的sizeof运算符

来源:互联网 发布:ipad安装软件 编辑:程序博客网 时间:2024/06/02 02:01

关于sizeof运算符,像下面这种用法,你一定不陌生

char *p;p = (char *)malloc (N * sizeof (char));

这是只是最常见的一种用法,C99标准下的sizeof又有了新的用法,比如说下面这些:

#include<stdio.h>#include<stdlib.h>int main(){int c;char fun1();int fun2();char* fun3();c = sizeof(2.0);//浮点数printf("sizeof一个小数:%d\n",c);c =sizeof(1);//整数printf("sizeof一个整数:%d\n",c);c =sizeof(fun1);printf("sizeof一个返回值为char的函数:%d\n",c);c =sizeof(fun2);printf("sizeof一个返回值为int的函数:%d\n",c);c =sizeof(fun3);printf("sizeof一个返回值为char* 的函数:%d\n",c);return 0;}char fun1(){char a = 's';return a;}char* fun3(){char *a =(char* )malloc (8);a = "sdf";return a;}int fun2(){int a=19;return a;}

当sizeof的对象是一个小数时,等价于
sizeof(double)
当sizeof的对象是一个整数时,等价于

sizeof(int)

当sizeof的对象是一个函数,在GCC编译器里面它的返回值都是1.(无返回值的函数不能作sizeof运算的对象)。当sizeof的返回值是一个指针的时候,返回值是4,因为指针在32位操作系统中占四个字节。你可能会说,数组相当于指针,sizeof的对是数组的话,是不是返回值也是四呢?哈哈,当然不是,数组毕竟不是指针,他只是有指针的能,别忘了sizeof测量的是对象在内存里面所占字节的大小,如果是数组,那当然返回值的数组所占字节的大小啊。


---------------------------------------------------------------------------------------------------------------------------------------------
思考一下,下面程序打印的结果

#include <stdio.h>#include <stdlib.h>int main(){  int a=10;  int foo();  printf("a=%d\n",a);  printf("%d\n",sizeof(foo));//函数对象  printf("%d\n",sizeof(&foo));  return 0;}int foo(){    int a =3;    printf("a=%d",a);//观察我是否被调用    return a;}


结果如下,看看猜对了没有


你发现问题没有,下面代码是没有执行的

int foo(){    int a =3;    printf("a=%d",a);//观察我是否被调用    return a;}

说明sizeof是在编译期间就确定了返回值,所以在运行的时候没有调用foo()函数。

再看下面代码,猜猜打印结果

#include <stdio.h>#include <stdlib.h>int main(){    int n=9;    printf("%d\n",sizeof (++n));    printf("%d",n);    return 0;}


没错,答案就是4 , 9。

同样的说明++n这行代码没有执行。

0 0