【c面试试题及答案】在编程语言中,C语言作为一门基础且强大的语言,广泛应用于系统开发、嵌入式系统和高性能计算等领域。因此,在许多技术岗位的面试中,C语言相关的问题仍然是考察候选人编程能力的重要部分。以下是一些常见的C语言面试试题及其解答,帮助你更好地准备面试。
1. 什么是C语言?它有哪些特点?
答:
C语言是一种高级程序设计语言,由Dennis Ritchie在1972年开发,最初用于开发UNIX操作系统。它的特点是:
- 高效性:C语言编写的程序运行速度快,接近底层硬件。
- 灵活性强:提供了直接操作内存的能力(如指针)。
- 可移植性强:C语言代码可以在不同平台上编译运行。
- 结构化编程:支持函数、循环、条件判断等结构化编程特性。
- 丰富的库函数:标准库提供了大量的函数供使用。
2. 指针和引用有什么区别?
答:
在C语言中,并没有“引用”这一概念,这是C++中的特性。但我们可以对比“指针”与“引用”的区别:
- 指针是一个变量,存储的是另一个变量的地址。可以通过解引用操作符``访问其指向的内容。
- 引用是某个变量的别名,不能为NULL,必须初始化,且不可更改所引用的对象。
例如:
```c
int a = 10;
int p = &a; // p 是一个指针,指向 a
```
3. 什么是数组?C语言中数组的大小是否可以动态改变?
答:
数组是一组相同类型数据元素的集合,按顺序存储在连续的内存空间中。在C语言中,数组的大小在定义时就必须确定,属于静态数组,无法动态改变。
如果需要动态调整数组大小,可以使用`malloc`、`calloc`、`realloc`等函数进行动态内存分配。
4. 什么是结构体?如何定义和使用?
答:
结构体(struct)是C语言中一种用户自定义的数据类型,可以将不同类型的数据组合在一起。
定义方式如下:
```c
struct Student {
char name[50];
int age;
float score;
};
```
使用示例:
```c
struct Student s1;
strcpy(s1.name, "Alice");
s1.age = 20;
s1.score = 85.5;
```
5. 什么是函数指针?如何使用?
答:
函数指针是指向函数的指针变量,可以用来调用函数或作为参数传递给其他函数。
定义方式:
```c
int add(int a, int b);
int (funcPtr)(int, int) = &add;
```
使用方式:
```c
int result = funcPtr(3, 5); // 等价于 add(3,5)
```
6. C语言中`const`关键字的作用是什么?
答:
`const`关键字用于声明常量,表示该变量的值在程序运行过程中不能被修改。
例如:
```c
const int x = 10;
// x = 20; // 编译错误
```
此外,`const`也可以用于指针,表示指针指向的数据不可变,或者指针本身不可变。
7. `malloc`和`calloc`有什么区别?
答:
两者都是C语言中用于动态分配内存的函数,主要区别如下:
| 函数 | 内存初始化 | 返回值 |
|----------|-------------|----------------|
| `malloc` | 未初始化 | 分配的内存地址 |
| `calloc` | 初始化为0 | 分配的内存地址 |
例如:
```c
int arr1 = (int )malloc(10 sizeof(int));
int arr2 = (int )calloc(10, sizeof(int));
```
8. 什么是递归?请举例说明。
答:
递归是指函数直接或间接调用自身的过程。递归通常用于解决可以分解为相似子问题的问题。
示例:计算阶乘
```c
int factorial(int n) {
if (n == 0)
return 1;
else
return n factorial(n - 1);
}
```
9. 什么是全局变量和局部变量?它们的区别是什么?
答:
- 全局变量:定义在函数外部的变量,作用域是整个程序,生命周期贯穿整个程序运行。
- 局部变量:定义在函数内部的变量,作用域仅限于该函数,生命周期在函数调用结束时销毁。
区别:
- 全局变量可以被所有函数访问,而局部变量只能在定义它的函数中使用。
- 全局变量可能影响程序的可维护性和安全性,应谨慎使用。
10. 什么是野指针?如何避免?
答:
野指针是指指向无效内存地址的指针,可能是未初始化的指针、已释放内存的指针或越界访问的指针。
避免方法:
- 初始化指针为`NULL`。
- 在使用指针前检查是否为`NULL`。
- 释放内存后,将指针设为`NULL`。
总结
C语言是很多程序员学习的第一门编程语言,也是理解计算机底层原理的重要工具。掌握C语言的基础知识和常见面试题,不仅有助于通过面试,也能提升你的编程能力和逻辑思维。希望以上内容能对你的学习和面试有所帮助!