很容易弄混淆的知识点

1.简述Makefile的作用
makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是–“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率

2.sizeof与strlen的区别:
1. strlen 是函数,sizeof 是运算符。
2. strlen 测量的是字符的实际长度,以’\0’ 结束。而sizeof 测量的是字符的分配大小
3.但是在子函数中,ziseof 会把从主函数中传进来的字符数组当作是指针来处理。指针的大小又是由机器来决定,而不是人为的来决定的。
4.我们知道字符数组的初始化一次性赋值,也可以逐个赋值。可以指定数组的大小,也可以不指定数组长度
5.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。而大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。
6.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。

3.什么是野指针?如何避免野指针。
野指针:指向内存被释放的内存或者没有访问权限的内存的指针。
如何避免野指针:
一、对指针进行初始化
①将指针初始化为NULL。
②用malloc分配内存
③用已有合法的可访问的内存地址对指针初始化
二、指针用完后释放内存,将指针赋NULL。

4.c语言分配内存的方式有哪些?
c语言中常见的内存错误有哪些?
一般来说有以下三种:
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量等等。
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。
(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。这种方式可能引起的问题是比较多的。
1、内存分配未成功,却使用了它
2、内存分配虽然成功,但是尚未初始化就引用它。
3、内存分配成功并且已经初始化,但操作越过了内存的边界。
4.忘记了释放内存,造成内存泄露。
5、释放了内存却继续使用它。

5.Static全局变量与普通变量的区别?static全局变量只初使化一次,防止在其他文件单元中被引用;
Static局部变量与普通局部变量的区别?static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数的区别?static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

6.#include <> 和 #include “” 有什么区别?

include< file >编译程序会先到标准函数库中找文件

include”file” 编译程序会先从当前目录中找文件

7.char *const p; char const *p; const char *p 三者的区别。
第一个和第三个是一样的, p都是指向const char类型的指针, 不可以赋值给*p, 就是不可通过这个指针改变它指向的值.
第二个: char * const p是指向char的常指针, 指针需在声明时就初始化, 之后不可以改变它的指向.

8.写一个 宏MIN,这个宏输入两个参数并返回较小的一个。
另外,当你写下面代码时会发生什么事? least = MIN(*p++,b);

define MIN(a,b) ((a) <= (b)? (a) : (b))

指针p会作两次++自增操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值