1. 局部变量和全局变量的区别
局部变量也称为内部变量,局部变量是在函数内作定义说明的,其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
全局变量也称为外部变量,它是在函数外部定义的变量,它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序;需注意:在同一个源文件中,局部变量和全局变量同名,则在局部变量的作用范围内,全局变量被 “屏蔽” ,不起作用。
2. 关于局部变量的作用域,有哪些注意点
1)主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。同时,主函数中也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。
2)形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。
4)在复合语句中也可定义变量,其作用域只在复合语句范围内。
3. int、double、short、float、char、long 等类型变量名各占用多少字节
int:4字节 double:8字节 short:2字节 float:4字节 char:1字节 long:4字节
4. 简要介绍关键字static
1)可以修饰局部变量、全局变量、函数;
2)修饰局部变量作用:使函数生命周期延长到程序结束后再释放;
3)修饰全局变量作用:使全局变量只能在本文件访问,不能被其他文件访问;
4)修饰函数作用:使函数只能在本文件内被调用,不能在其他文件内调用。
5. 简要介绍关键字extern
1)可以修饰外部变量或外部函数;
2)用来声明某个变量或函数在本文件之外的其他文件定义的,要使用时到其他文件找。
6. 简要介绍关键字const
1)不仅可以修饰基本类型,还可以用来修饰构造类型和指针及各种复杂类型结合体;
2)const修饰一个变量,此变量被声明为只读变量,即不能通过这个变量名来修改变量的值,但是变量指向的空间里的值是可变的;
3)const的主要作用:防止程序运行过程中对函数实参的值做修改,提高安全性。
7. 简要介绍关键字register
1)只能修饰局部变量,不能修饰全局变量和函数;
2)当一个变量是register变量时,不能通过 & 来获取变量地址,因为它保存在 CPU 寄存器中;
3)register 是一个寄存器变量,它的作用:请求编译器将变量尽可能的保存在 CPU 寄存器中,提高执行效率,省去了 CPU 从内存中读取数据的时间;
4)register 一般修饰经常被访问的变量。
8. 简要介绍关键字typedef
1)typedef 作用:为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
2)在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
9. 枚举与 #define 宏的区别
1)#define宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值;
2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量;
3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。
10. 联合与结构的区别
在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和;而在联合中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度(同样遵循对齐)。这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。