sizeof的一些误解

首先的一个误解是以为sizeof是一个函数,因为我们常常看到sizeof()这样的用法,但是sizeof是一个操作符,一个一元操作符!!!
int i=0;
printf("%d/n",sizeof (int) );
上述代码显示sizeof i,sizeof(i),sizeof(int)都正确,但是sizeof int不对,当计算的是类型的大小时,必须用()
int array[10]={0};
void foo(int *array)
{

    printf("array has %u elements!/n",(sizeof array / sizeof(int)));
}
你觉的会输出10吗,当然不会!!!!why???在多数系统中,他会输出1,因为sizeof针对的是一个指向整数类型的指针,而指针一般占用和int同样大小的存储空间。。。

那么能改变这种情况吗,就是说我能在一个子函数中知道传入的array有多大吗,至少就我所知而言,sizeof不可以。。。即使改成下面这样:

void foo_2(int **array)
{

    printf("array has %u elements!/n",(sizeof *array / sizeof(int)));
}
还是不行,原因很简单,sizeof 就是判断这个变量的类型大小,他不会作一些替换之类的工作。。看看下面这几行代码,或许你就更清楚了!
char s[]="I love you!";
printf("%d/n",sizeof s);
将会输出12(包含了末尾的空字符)。但是
char *s="I love you!";
printf("%d/n",sizeof s);
将会输出。。。4。。。!!!所以至少在这个程度上来说数组和指针还是有一些区别的,这样我们可以用sizeof来获得一个数组的大小。。但是我不知道这是好事还是坏事。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值