[Syntax C] sizeof 小记

1. sizeof 是关键字,不是函数,所以不要以函数的眼光去看待它。

 以下是正确的:

    int i = 10;
    printf("%d\n", sizeof i);
    printf("%d\n", sizeof (int));

 以下是错误的:

    printf("%d\n", sizeof int);

 

2. sizeof 是在编译时期被执行,但在实现ISO C99的编译器中也可以在执行期中被执行。

所以下面的定义是正确的:

  char array[sizeof(int) * 10];

3. 在32位的系统中,sizeof 任何类型的指针,其中都是4,因为指针的长度就是4byte。

  sizeof 基本类型的长度在32bit和64bit时都是一样的,这是由编译器决定的。

  而sizeof指针在32bit和64bit的操作系统上分别是4byte和8byte,这是由于:

  指针的作用是对内存寻址,32bit或64bit表示:CPU在一个时钟周期可以处理32bit或64bit的数据量。所以,32bit的操作系统最大支持4G内存(2的32次方)。

4. 当sizeof的对象是数组名时,返回的是数组的实际长度。

举例:

    char a[] = "abcde";
    int b[3];
    char (*c)[] = { "a", "b", "c" };
    char *d[] = { "aaa", "bbb", "ccc" };

    printf("%d\n", sizeof a); // 输出6,因为存在'\0'
    printf("%d\n", sizeof b); // 输出3*4=12
    printf("%d\n", sizeof c); // 输出8,这是一个数组指针,它的本质是一个指针,所以在64bit中,sizeof 指针=8 
    printf("%d\n", sizeof d); // 输出24,这是一个指针数组,它的本质是数组,里面存放了3个指针,所以=8*3=24
    printf("%d\n", sizeof a / sizeof(char)); // 输出6,这是我们求取一个数组中有多少个元素的方式

5. 数组作为参数传递时,传递的是指针,此时的sizeof对象其实是指针:

void fun(char a[]){
    printf("%d\n", sizeof a); // 输出8
}

6. 各基本类型的sizeof,64位系统

    printf("%d\n", sizeof(char)); // 输出 1
    printf("%d\n", sizeof(short)); // 输出 2
    printf("%d\n", sizeof(int)); // 输出 4
    printf("%d\n", sizeof(long)); // 输出 8
    printf("%d\n", sizeof(float)); // 输出 4
    printf("%d\n", sizeof(double)); // 输出 8
    printf("%d\n", sizeof(unsigned char)); // 输出 1
    printf("%d\n", sizeof(unsigned short)); // 输出 2
    printf("%d\n", sizeof(unsigned int)); // 输出 4
    printf("%d\n", sizeof(unsigned long)); // 输出 8

 

 

 

posted on 2014-08-31 00:13  青梦吾源  阅读(213)  评论(0编辑  收藏  举报

导航