C语言基础知识

本文主要回顾了C语言的基础知识,包括字节对齐的概念及其影响,解释了常数0转化为指针的原理,探讨了内联函数的本质,并通过实例介绍了二分查找的实现及边界处理。对于C语言初学者或面试复习具有参考价值。
摘要由CSDN通过智能技术生成

今天去腾讯面试,本以为面试者会问很深的问题,结果答了份卷子,很基础,但是自己很多东西愣是忘了,这里mark一下!

一、字节对齐

        字节对齐的原因,是机器在存取内存中保存的数据的高效性。通常机器是机器位数为自然边界来访问内存的,如果一个4字节整形数,所在的内存不在虚拟内存的自然边界。则CPU需要读多于一次的数据,这样就降低了效率。

       所以,简单地说,就是保证CPU指令在访问数据的时候,能一次读取,而不需要跨越内存的自然边界。32位系统默认4字节对齐。当然可以通过#pragma pack(1)将内存改为1字节对齐,用#pragma pack()恢复默认的字节对齐。

 

二、常数0转化为指针

      (int) ((int*)0+4) 主要是被(int*)0给搞晕了,平时用的都是char *p; int *q; q=(int*)p; 这里需要说明的是,0是常量,(int*)0表示的是一个指针,指针指向0内存地址,指针的步长为sizeof(int)。类似这种: int a ; (char*)a:表示的是一个char*的指针,指针的值是int型变量a指向的值。所以,((int*)0+4)表示的是指向值为16的内存地址。转为为int型,自然也是16

 

三、内联函数的本质

四、二分查找

两次倒在二分查找。主要是没有考虑边界问题。回来实现了下:

int main()
{
    int low =0, middle =0, high=9;
 int narray[10]={1,7,9,15,23,45,52,65,65,69};
 int

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值