1.入门基础
1.1从源码文件到可执行文件经历哪些过程?
a.预编译:处理预编译指令(#define #include #if ...)、去掉注释空格
b.编译:将源码文件翻译为汇编文件
c.汇编:将汇编文件翻译为机器代码,二进制文件(目标文件)
d.链接:将目标文件以及所依赖的库进行链接,生成最终的可执行文件
1.2C中的内存模型
栈:局部变量,函数的调用信息
堆:程序中动态分配的内存空间
数据区:全局变量,静态变量,字符串
程序区:程序代码
1.3什么是标识符?有哪些规定?
给变量,函数,结构体,数组等元素所给定的命名(字符序列)
强制:是有字母(大小),数字,下划线组成的
不能以数字开头
不能是关键字
建议:见名知义 ,小驼峰,下划线分割
1.4 32位或者64位系统地址是多少字节?
4,8
2.变量
2.1声明与定义有什么区别?
声明:程序中告诉编译器变量的存在并指定类型,但不赋值
定义:程序中告诉编译器变量的存在并指定类型,同时赋值
2.2局部变量与全局变量有什么区别?
全局变量 局部变量
生命周期:从开始到程序运行结束 定义变量的函数或者代码块运行结束
作用域:全局 定义变量的函数或者代码块
储存位置:数据区 栈
2.3变量与常量有什么区别?
变量:可以被修改,在程序运行到该变量时分配内容
常量:不可修改,在编译期间分配内容
2.4定义常量的方法有哪些?有什么区别?你在工作时选着哪一种?
const:有作用域,有类型安全检查
#define:做文本替换,效率高
2.5存在一个变量num,num++与++num有什么区别?
num++先取值后运算
++num先运算后取值
3.宏
3.1C语言中有哪些预设编译指令?
#include #define #if #endif
#else #elif #undef
#ifdef #ifndef
3.2如何取消宏定义?
#undef
3.3什么是条件编译?应用场景有哪些?
在预编译阶段,可以根据条件选择哪些代码参与编译或者被排除
应用场景:跨平台
多版本