直接上货:
1,volatile关键字的作用是什么?
告诉编译器,不要对我这个变量做过分的优化,直接访问内存,不要通过寄存器访问。实时获取变量的最新值。
2,全局变量和局部变量的区别?
全局变量如果没有使用static修饰的话,可以使用在整个项目里面,如果加static修饰的话,只会在本地 .c文件中使用。
局部变量是存在栈区空间,它的作用域只是在它的函数内部。
全局变量和局部变量同名的话,采用局部优先原则,局部变量会屏蔽全局变量。
3,什么是预编译?
预编译是做些代码文本的替换工作。
处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。
主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
C 编译系统在对程序进行通常的编译之前,首先进行预处理
例如#include 指令#define指令 #if、#else和#endif指令
4,static关键字的作用?
第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0;
5. 为一个绝对地址为0X8877的整形变量赋值为0X7788
三行代码实现:
int *p;p = (int*)0x8877;*p = 0x7788;
6,自己写代码实现strcopy的功能
char s1[32] = "888888888";
char s2[32] = "hello world";
int i = 0; //只要 s2 没遇到 '\0' 就将字符复制给 s1
while(s2[i] != '\0'){
s1[i] = s2[i];
i++;
}
s1[i] = s2[i];//将 s2 的 '\0' 也拷贝给 s1 !!!!
7. 用一个宏来表示一年中有多少秒(笔试:考察宏的写法是否简介、明了、严谨。)
#define SECONDS_PER_YEAR (60*60*24*365)
8. 用C语言写一个宏函数,得到两个参数值的最小值
#define MIN(a,b) (a > b)? a : b ;