问题 :请解释C语言中结构体的定义和初始化方法。答案
定义结构体:可以使用以下三种方法定义结构体类型:
1. 定义结构体类型的同时定义结构体变量,例如:
```c
struct ord {
int x;
int y;
int z;
} a;
```
2. 使用无名结构体类型定义结构体变量,例如:
```c
struct {
int x;
int y;
int z;
} a;
```
3. 先定义结构体类型,后定义结构体变量,例如:
```c
struct ord {
int x;
int y;
int z;
};
struct ord a;
```
初始化结构体:可以在定义结构体变量时进行初始化,例如:
```c
struct ord my_ord = {1, 2, 3};
```
问题 :请解释C语言中`static`关键字的用法和作用。答案
隐藏:当同时编译多个文件时,所有未加`static`前缀的全局变量和函数都具有全局可见性。如果加了`static`,就会对其它源文件隐藏。
保持变量内容持久:如果作为`static`局部变量在函数内定义,它的生存期为整个源程序,但是其作用域不会发生改变,只能在定义该变量的函数内使用该变量。
初始化:`static`变量默认初始化为0。对于一个类中成员变量和成员函数来说,加了`static`关键字,则此变量/函数就没有了`this`指针了,必须通过类名才能访问。
问题 :请解释C语言中`if-else`和`switch`语句的区别。答案
if-else:是条件选择语句,可以对各种关系进行比较,例如大于、小于、等于等。
switch:只能做等式比较,即只能对基本类型进行数值比较。`switch`语句只能做几个数据类型的等式比较,实现非等式效率低。
问题 :请解释C语言中数组下标越界的危害及如何避免。答案
危害:数组越界将会把数据存放到一个未知的区域,而这个未知的区域如果恰好是系统很重要的位置,可能就会修改系统程序导致系统出错甚至是崩溃。
避免方法:进行数组下标越界检查,确保数组的访问不会超出其有效范围。
问题 :请解释C语言中动态内存分配的函数及其用法。答案
malloc:用于动态分配内存,函数原型为`void *malloc(size_t size)`,返回指向分配的内存块的指针。如果分配失败,返回`NULL`。
calloc:用于动态分配内存,并初始化所有字节为0,函数原型为`void *calloc(size_t num, size_t size)`,返回指向分配的内存块的指针。如果分配失败,返回`NULL`。
realloc:用于调整之前分配的内存大小,函数原型为`void *realloc(void *ptr, size_t size)`,返回指向新的内存块的指针。如果分配失败,返回`NULL`。
希望这些内容能帮助你准备C程序设计考研复试。