首页 > 其他 > 详细

有时好用有时坑爹的sizeof

时间:2015-10-01 18:01:46      阅读:121      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!