sizeof

最近找工作,不免有些笔试,有些会涉及到c和c++,本文主要谈谈sizeof。

 

从例子谈起吧。

  1. struct A
  2. {
  3.     int i;
  4.     char c;
  5. };

问sizeof(A)结果是多少?

 

插一句,本文并不旨在讨论sizeof的运算结果。

 

最常见的题型莫过于此。究竟等于几呢?我猜是8,编译运行结果的确是8(手头有个vs2008,别的编译器没试)。为什么是8不是5,一定有许多人可以回答,此处就不赘述。

 

笔者想说的是,到底sizeof的作用是什么?写段代码:

  1. int *pointer; /*pointer to type int, used to reference our allocated data*/
  2. pointer = malloc(sizeof(int) * 10);

上面的代码作用是分配10个int类型大小的空间,动态分配数组时常用的办法。

 

为什么不直接写malloc(4 * 10)呢,我可以算出来sizeof(int)的。到此,大家应该明白我想说什么了。对,究竟我们为什么要知道4?

 

引用《C++ Programming Language》中的一些话(Section 4.6, 75)

 

“Some of the aspects of C++’s fundamental types, such as the size of an int, are implementation-defined.”

 

C++基本类型的某些方面,比如int的大小,是实现定义的。

 

“People who claim they don’t care about portability usually do so because they use only a single system and feel they can afford the attitude that "the language is what my compiler
implements." This is a narrow and shortsighted view.”

 

不关心移植性的人通常这么做,因为他们只使用单一的系统并且有种看法,就是“语言就是编译器实现的东西”,这是狭隘且目光短浅的看法。

 

既然sizeof的出现是避免我们写出4,为什么还要知道4甚至前面的8呢?

 

只是为了区别菜鸟与高手吗?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值