一、什么是变量,什么是常量
答:
1、变量:
其值在其作用域内可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储空间。变量依据其定义的类型,分为不同的类型,如整型变量,字符型变量,浮点型变量,指针型变量,变量的值发生改变意味着它可以被覆盖、被写入、被赋值。每一个变量必须要有一个名字和它所在内存空间绑定。
2、 常量:
其值不会发生改变的量称为常量,它们可以和数据类型结合起来分类,如整型常量、浮点型常量、字符型常量。常量可以不经过定义和初始化,直接引用,常量还分为直接常量和符号常量。符号常量,如宏定义的“#define PI 3.14”。
二、主调函数,被调函数,形参,实参,区别
答:
如果在函数A执行的过程中调用函数B。则A是主调函数,B是被调函数
形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量
举个例子:int max(int a,int b){…}
这里的a,b为形参,接下来调用max()
void main(){
int c,int d
…
max(c,d)
}
这里的c,d为实参,main()为主调函数,max()为被调函数
三、局部变量和全局变量的区别
答:
1、 局部变量:在函数内作定义说明,其作用域仅限于函数内部,离开该函数后再使用是非法的
2、 全局变量:在函数外部定义的变量,它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。
注:如果同一源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”。
四、补码
答:负数的补码符号位不变,各位取反再加1。
在计算机系统中,数值一律用补码来表示(储存)。原因是使用补码,可以将符号位和其他位统一处理。
五、定义与声明的区别
答:
定义:编译器创建一个对象,位这个对象分配一块内存并给它取上一个变量名,变量名和这块内存一旦匹配,就不会改变,这块内存的位置也不会改变。一个变量在一定的区域内(如函数内、全局等)只能被定义一次,如果被定义多次,编译器会提示你重复定义同一个变量。
声明:1、告诉编译器,这个名字已经匹配到一块内存上了。声明可以出现多次。2、告诉编译器,这个名字已经被预订了,别的地方再也不能用它来作为变量名。
六、static的作用
答:
1、 在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束后才释放。
2、 static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其他文件中访问,即便是extern外部声明也不可以。
3、 static修饰一个函数,则这个函数只能在本文件中调用,不能被其他文件调用。static修饰的局部变量存放在全局数据区的静态变量区,初始化的时候自动初始化为0;
(1) 不像被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不像让这个数组在函数调用结束释放可以使用static修饰。
(2) 考虑到数据的安全性(当程想要使用全局变量的时候应该先考虑使用static)
七、辨别const在其修辞的复杂类型下修辞的对象
答:
将类型去掉;
八、使用寄存器变量时应注意的问题
答:
1、 待声明为寄存器变量类型应该是cpu寄存器所能接收的类型,意味着寄存器变量是单个变量,变量长度应该小于等于寄存器长度
2、 不能对寄存器变量使用地址符&,因为该变量没有内存地址。
3、 尽量在大量频繁操作时使用寄存器变量,且声明的变量个数应该尽量少。
九、volatile的作用
答:
1、 告诉编译器不要进行优化;
2、告诉系统始终从内存中取变量的地址,而不是从缓存或寄存器中取变量的值(加volatile和不加volatile系统都会产生缓存)
十、typedef和#define的区别
答:
#define 是文字替换
typedef是别名
举个列子:
typedef int* pINT;
#define pINT2 int*
pINT a,b; //定义了2个指针变量
pINT2 a,b; //定义了一个指针变量,一个整型