第2章 数据类型

1、局部变量和全局变量的区别

局部变量是在函数内作定义说明的,其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。全局变量是在函数外部定义的变量,不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用。

2、static全局变量与普通的全局变量的区别

这两者在储存方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个原文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

由于静态全局变量的作用域限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。

static全局变量与普通的全局变量的区别是static全局变量只初始化一次,防止在其他文件单元被引用。

3、extern的使用

extern是指当前变量或函数不是在本源文件内声明的,它是外部变量或外部函数。先在当前文件查找有没有全局变量,没有才会去其他文件查找。

4、const的作用

  1. 可以定义const常量,具有不可变性。 
  2. 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
  3. 可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。
  4. 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
  5. 可以节省空间,避免不必要的内存分配。
  6. 提高了效率。 

5、register的作用

在函数内部定义变量时,默认是auto类型,即分配给变量内存。如果定义一个变量用register关键字,那么编译器尽可能把变量存放在CPU内部寄存器中,这样就不必通过内存寻址来访问变量,提高访问效率。

扫描二维码关注公众号,回复: 3503320 查看本文章

6、一个参数既可以是 const 还可以是 volatile 吗?

如果一个变量不会被本程序改变,通常可能给它加上const,但如果该变量可能被其他程序改变而本程序又在检测这个变量的值,就需要给它加上volatile,于是变量就同时有volatile和const了。

7、typedef的作用

  1. 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。
  2. typedef来定义与平台无关的类型。
  3. typedef 还可以掩饰复合类型,如指针和数组。 
  4. 代码简化。为复杂的声明定义一个新的简单的别名。

8、typedef与#define的区别

typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名。typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

9、枚举和#define的区别

  1. #define宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值。
  2. 一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
  3. 枚举可以一次定义大量相关的常量,而#define宏一次只能定义一个。

10、联合体和结构体的区别

struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。

对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。

猜你喜欢

转载自blog.csdn.net/dada12138/article/details/82944926