C语言面试常考的问题:(纯自己理解,如果我理解的有毛病,恳请指点)

  1. static:静态变量,内部变量,内部函数存放在静态区,值一直储存直到程序结束,静态局部变量:作用域只在函数内,出了这个函数,就不能用这个变量了,但值是一直保存在这个变量里的,下次再次调用这个函数,还可以取到这个值。静态全局变量:作用域在本.c中,出了这个.c就不能用了。静态函数:只有本.c的函数可以调用这个函数,静态变量只初始化一次
  2. extern:如果想用的变量或函数是在其他.c中定义的,那么需要在我们的文件中声明这个变量或函数,前面加上extern。并且我们的文件中要引用#include定义的那个.c
  3. inline:编译程序时,直接编译函数内的处理代替函数名。inline函数必须算法简单
  4. volatile:防止优化,让程序每次都去内存中取值。例如中断,或多进程,硬件等原因,寄存器值可能被优化了,值被改变了,但程序不知道,寄存器的值没有变。寄存器的值就不对了
  5. 栈:先进后出,局部变量,函数参数,返回值等通常存放在栈区,程序关闭后系统自动释放。全局变量和静态变量在一个区:全局区/静态区;常量在常量区;代码在代码区,二进制存储。
  6. 堆:需要malloc开辟空间,free释放,然后在把指针设为NULL。需要程序员手动释放。什么时候用堆呢?指针结构体一般自动开辟空间4个字节(指针类型都是4个字节),但结构体可能4个字节数不够用,就需要手动开辟空间。动态内存分配。
  7. 不用第三个变量(例如t=a;a=b;b=t)这种方式调换两个数:a=a+b;b=a-b;a=a-b;
  8. int(*p)[n]:指向n个存放整型数据的数组的指针;int*p[n]:由n个指向整型数据的指针组成的数组
  9. 写一个宏,宏的功能是两个数相加 #define(A,B) (A)+(B)注意使用括号,宏就只是把A和B的内容替换了,如果A和B是表达式,不加括号,由于优先级的原因可能答案不是我们想要的值
  10. #ifndef,#define,#end if的作用:防止头文件重复引用
  11. const int *p:常整型数指针,整型数不可变,指针指向的地址可变;int *const p:整型常指针,整型数可变,指针指向的地址不可变
  12. int *p(int,int):指针函数,一个返回指针的函数; int(*p)(int,int):函数指针,本质是一个指针变量,该指针指向这个函数
  13. 内嵌的结构体size of不算大小,只是声明,不占空间
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值