面试宝典-预处理、const与sizeof

  • T1.用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量。
{
    int a;
    char b[20];
    double ccc;
}

则 :
FIND(student,a); //等于0
FIND(student,b); //等于4

#define FIND(struc,e) (size_t)&(((struc*)0)->e)

其中(struc*)0表示将常量0强制转化为struc*型指针所指向的地址,&(((struc*)0)->e)表示取结构体指针(struc*)0的成员e的地址。因为该结构体的首地址为0,所以其实就是得到了成员e距离结构体首地址的偏移量。

考察预处理指令要注意 括号的使用 因为会出现 边界情况
在常量整数后面添加L表示是long类型,添加UL表示的是unsigned long

mutable修饰符 修饰的变量在常函数中是可以改变这个变量的值的。

关于sizeof(struct)的大小。为了方便对结构体内元素的访问和管理,当结构体内的元素的长度

  • T2. 指针和引用的差别:
    (1)非空区别:在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。 因此,如果你使用一个变量并让他指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时候你应该把变量声明为指针。因为这样你可以赋空值给该变量。
    不存在指向空置的引用这个事实意味着使用引用的代码效率比使用指针还要高。
    (2)合法性区别。在使用引用之前,不需要测试他的合法性。相反,指针则应该总是被测试,防止其为空。
    (3)可修改区别。指针与引用的另一个重要的区别是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象及其内容可以改变。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值