1.为什么数据类型间可以强制转换?
变量的值是变量所对应的内存区域内存放的二进制序列,变量的值不会因为变量的类型发生改变而改变,当变量转换为对应的类型时,内存区域内的二进制序列以该类型的形式翻译出来。
2.什么是全局变量和局部变量?
局部变量亦称内部变量,是在函数内部定义的变量,其作用域只限于函数内部,离开函数后使用该变量即为非法。
全局变量亦称外部变量,是在函数外定义的变量,其作用域在整个源程序内,在函数内部使用全局变量一般应做全局变量的说明,说明符为extern,若在函数前定义了全局变量,在函数内使用时可不加以说明。
3.常量中分为直接常量和符号常量,二者有什么区别?
直接常量为字面常量,就是我们通常见到的各种数字,表达式等,代表一个明确的数值。符号常量,如宏定义中#define,就是仅仅把一个字符串形式赋给变量,该字符串可以是任何形式,但不能参与任何运算,例如3*3,它不是9,而仅仅是3*3,在函数中参与运算时要注意优先级。
4.声明和定义的区别?
定义就是将一个变量名匹配到一个固定的内存空间,定义只能被定义一次。
声明是提前告知编译器该变量已经匹配到相应的一块内存上了,其定义可能在其他地方,声明可以出现多次。
5.static有什么作用?
static用来修饰变量,被修饰的该变量空间独立于auto变量和栈变量。static修饰局部变量时,局部变量的生命周期和存储空间发生变化,但作用域不会发生变化。static修饰全局变量时,会改变其作用域的范围,由原来的整个工程可见变为本源文件可见。同样,修饰函数时,也改变函数的作用域。
6.const有什么作用?
const用来定义常量,且可以在任意位置定义常量,相比#define只能在程序开头定义,它具有更好的灵活性。举例:
const int a = 10
int const a =10
const int*p
int* const p
7.register是什么?
如果一个变量被register修饰,则其为寄存器变量,让该变量的访问速度达到最快。变量的值通常都放在内存里,CPU都是先将变量的值从内存中取出来放入寄存器中进行运算,结果放回内存中。所以尽量在大量频繁操作时使用寄存器变量。
8.typedef 的作用是什么?
typedef主要用来给变量一个易记且意义明确的新名字和简化一些比较复杂的类型声明。
用法:在通常定义和声明的格式前加上typedef,那定义或声明的变量名即为新的类型名。
9.枚举是什么?
enum enum_type_name
{ENUM_CONST_1,ENUM_CONST_2.........}
enum_variable_name;
enu_type_name是类型名,enum_variable_name是该类型下的一个变量,其值只能是大括号中的一个,否则编译会报错。
该类型变量还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋值,它们的值从0开始依次递增1。
10.什么是联合体?
联合与结构相似,在结构中各成员有各自的空间,一格结构变量的总长度是各成员长度之和。在联合中,各成员共享一段内存空间,联合变量的长度等于各成员中最长的长度。联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。