码迷,mamicode.com
首页 > 其他好文 > 详细

有时好用有时坑爹的sizeof

时间:2015-10-01 18:04:57      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

  C中的该运算符的使用方式是sizeof(type_name);可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。要注意sizeof是运算符,它在编译时起作用,而不是运行时。返回值为unsigned int 类。

  从名字可以看出size of 即测量类型的长度,但此处就产生了一个问题:传入普通的类型时还好,肯定是测量这个类的长度的,结构也可以。但传入数组的时候问题来了——数组名是指针,那么传入数组的时候测量的是只针对的长度呢,还是指针指向的内存的长度呢?此处我就被坑了!

且看代码如下:

#include<stdio.h>
void main(){
    void print(int *c,int d[][3]);
    int a[10],b[2][3];
    printf("%d\t%d\t",sizeof(a),sizeof(b));
    print(a,b);
}

void print(int *c,int d[][3]){
    printf("%d\t%d\n",sizeof(c),sizeof(d));
}

 其输出结果可能会出乎某些人的意料

 40  24  4  4

为什么是这种结果呢,其实sizeof本来是测量类型的长度的。而数组本身其实是通过指针来实现的,所以实际测量的其实是指针的长度,至于测量数组的长度仅在数组的作用域里可以实现,一旦传入其他函数中就会编程一个指针而已

有时好用有时坑爹的sizeof

标签:

原文地址:http://www.cnblogs.com/CaiNiaoShuo/p/4851257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!