### C语言面试必看知识点详解 #### 一、C语言概述 **1.1.1.1 基本知识点** 1. **C语言起源**: - **起源时间**:C语言最初由丹尼斯·里奇(Dennis Ritchie)在1972年左右开发。 - **发明者**:丹尼斯·里奇(Dennis Ritchie),在贝尔实验室工作期间创造了C语言。 2. **C语言优势**: - **便携性**:C语言的程序可以很容易地移植到不同的计算机系统上。 - **高效性**:C语言接近硬件层面,因此能够编写出运行效率非常高的程序。 - **灵活性**:C语言提供了丰富的控制结构和数据类型,使得程序员能够灵活地实现各种功能。 - **广泛的应用领域**:C语言在操作系统、嵌入式系统、游戏开发等领域有着广泛的应用。 - **强大的库支持**:C语言拥有大量的标准库和其他第三方库,这些库可以大大简化编程工作。 3. **C语言未来发展**: - **与其他语言结合**:随着新的编程语言和技术的发展,C语言将更多地与Python、JavaScript等语言结合使用。 - **持续改进**:为了适应现代计算环境的需求,C语言将继续更新和完善。 - **教育领域的普及**:C语言作为编程基础学习的一部分,将在教育领域继续发挥重要作用。 4. **C语言不足**: - **内存管理复杂**:C语言缺乏自动垃圾回收机制,需要手动管理内存。 - **安全性问题**:由于直接操作内存,容易出现缓冲区溢出等问题。 - **学习曲线较陡峭**:对于初学者来说,C语言的学习门槛相对较高。 5. **C语言的标准**: - **ANSI C (C89)**:这是第一个正式的C语言标准,发布于1989年。 - **ISO/IEC 9899 (C90)**:1990年发布的国际标准,与ANSI C略有不同,但基本上一致。 #### 二、C语言数据类型 **1.1.2.1 基本知识点** 1. **基本数据类型**: - **整型(int)**:包括`short int`, `int`, `long int`等。 - **字符型(char)**:用于存储单个字符。 - **浮点型(float)**:用于存储实数。 - **双精度浮点型(double)**:用于存储精度更高的实数。 - **长双精度浮点型(long double)**:存储精度更高的浮点数。 2. **字符类型**: - C语言中的字符类型也是整型的一种,可以使用有符号(`signed`)或无符号(`unsigned`)的形式。 - 例如,`char c = 'A';` 和 `unsigned char uc = 'B';` 3. **布尔类型**: - C语言标准库中并没有直接提供布尔类型,但在实际应用中可以通过宏定义或者使用`<stdbool.h>`头文件中的`bool`类型来模拟布尔类型。 - 例如,使用宏定义:`#define true 1` 和 `#define false 0` - 或者使用标准库:`#include <stdbool.h>` 后,可以使用`bool`类型。 4. **整型长度与机器字长关系**: - 整型的长度通常与机器字长有关,但C标准并未明确规定整型的长度必须等于机器字长。 - 例如,`int`类型在32位系统中通常是32位,在64位系统中可能是32位或64位。 5. **长整型与整型长度关系**: - 这句话是对的,即“长整型至少应该和整型一样长,而整型至少应该和短整型一样长”。 - 在C语言中,`long int`类型的长度至少与`int`相同,`int`类型的长度至少与`short int`相同。 6. **八进制与十六进制表示**: - 八进制表示以数字`0`开头(新版C语言规范中推荐使用`0o`或`0O`作为前缀)。 - 十六进制表示以`0x`或`0X`开头。 - 例如,`010`表示八进制的8,`0x10`表示十六进制的16。 7. **字符减法**: - 这三条语句并不完全等价。 - 第一条语句`value = value - 48;`是数值减法。 - 第二条语句`value = value - '\60';`使用了八进制转义序列,但`\60`实际上是字符`'0'`,因此与第一条语句等效。 - 第三条语句`value = value - '0';`是字符减法,如果`value`是字符类型,则这条语句才是有效的。 8. **枚举类型部分赋值**: - 枚举类型可以仅对部分成员赋值,其余成员将按顺序自动编号。 - 例如,`enum Jar_Type{CUP = 8, PINT = 16, QUART, HALF_GALLON, GALLON = 128};` - 这样的定义是合法的。 9. **枚举类型成员值**: - `QUART`的值是`17`(因为它是`PINT`值+1)。 - `HALF_GALLON`的值是`18`(因为它在`QUART`后面)。 10. **浮点数类型**: - 浮点数家族包括`float`、`double`和`long double`类型。 11. **浮点数最大值定义**: - `FLT_MAX`、`DBL_MAX`和`LDBL_MAX`分别定义了`float`、`double`和`long double`的最大值。 - 这些宏定义可以在`<float.h>`头文件中找到。 12. **字符串结束标志**: - 字符串在C语言中是以空字符`\0`作为结束标志的。 - 例如,字符串`"hello"`实际上存储为`'h', 'e', 'l', 'l', 'o', '\0'`。 13. **空字符串表示**: - 空字符串表示为空字符`\0`。 - 即`""`表示一个空字符串。 14. **字符串在表达式中的使用**: - 当字符串出现在表达式中时,如`printf("%s\n", "Original input.");`,表达式实际上使用的是字符串的地址。 - 这个说法是对的。 15. **数组下标起点**: - C语言中,数组的下标总是从0开始。 16. **数组越界处理**: - 这句话是正确的,C编译器通常不会检查数组下标是否越界。 - 例如,`int arr[10]; printf("%d", arr[11]);` 可能会导致未定义行为。 - 示例程序: ```c #include <stdio.h> int main() { int arr[10]; printf("%d\n", arr[10]); // 可能导致未定义行为 return 0; } ``` 17. **typedef机制**: - `typedef`可以为已存在的数据类型定义一个新的名称。 - 例如,`typedef char *ptr_to_char; ptr_to_char a;` 定义了一个指向字符的指针类型,并声明了一个这样的指针变量。 - `char* ptr_to_char;` 是一个普通的指针声明。 18. **const变量赋值**: - `const`变量只能在其声明时初始化,或者通过传递给函数的实参初始化。 - 除此之外,`const`变量不能被重新赋值。 - 示例: ```c int const a = 15; // 初始化 void func(int const b) { /* ... */ } // 通过实参初始化 ``` 19. **const属性指针**: - `int const *pci;` 指针指向的数据不可变。 - `int *const cpi;` 指针本身不可变,但指向的数据可以改变。 - `int const *const cpci;` 指针本身及其指向的数据均不可变。 20. **宏定义与const变量的区别**: - `#define MAX_ELEMENTS 50` 定义了一个预处理器宏,没有类型。 - `int const max_elements = 50;` 定义了一个整型`const`变量。 - 主要区别在于宏替换是在编译阶段完成的,而`const`变量则是在运行时才分配内存。 21. **标识符作用域**: - 文件作用域:在文件最外层声明的标识符。 - 函数作用域:在函数参数列表或函数体中声明的标识符。 - 代码块作用域:在一对花括号内声明的标识符。 - 原型作用域:在函数声明的参数列表中声明的标识符。 22. **代码块作用域**: - 这个描述是正确的。 - 例如: ```c { int x = 10; // x具有代码块作用域 printf("%d\n", x); } ``` 23. **文件作用域**: - 这个描述是正确的。 - 例如: ```c int y = 20; // y具有文件作用域 void func() { printf("%d\n", y); // 在整个文件内都可以访问y } ``` 24. **链接属性**: - `external`:可以在多个文件中访问。 - `internal`:仅在当前文件中可见。 - `none`:没有链接属性,仅在当前作用域中有效。 - 示例: ```c extern int x; // external链接属性 static int y; // internal链接属性 int z; // 缺省为external链接属性 ``` 25. **extern与static**: - 这个描述是正确的。 - 例如: ```c extern int x; // external链接属性 static int y; // internal链接属性 ``` 如果想要将`x`改为`internal`链接属性,可以在声明时添加`static`关键字: ```c static extern int x; // internal链接属性 ``` 26. **变量的初始化与作用域**: - 变量的初始化与其作用域密切相关。 - 例如,全局变量和静态局部变量可以在声明时初始化,而自动变量则需要在每次调用函数时初始化。 - 示例: ```c int global_var = 10; // 全局变量,可以在文件的任意位置初始化 void func() { static int static_local = 20; // 静态局部变量,只在第一次调用时初始化 int auto_local = 30; // 自动局部变量,每次调用函数时初始化 } ``` 通过以上内容,我们可以看到C语言面试中经常涉及到的基础知识点,涵盖了C语言的历史背景、基本概念、数据类型以及作用域和链接属性等多个方面。掌握这些知识点对于准备C语言面试非常重要。
- 粉丝: 123
- 资源: 164
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的需求管理系统.zip
- 基于深度学习YOLOv5的车牌检测与识别项目源码
- (源码)基于Python的CSGO饰品价格分析与比较系统.zip
- ccs3.3安装补丁SR12-CCS-v3.3-SR-3.3.82.13 2
- (源码)基于Spring Boot框架的攀枝花物流系统.zip
- (源码)基于Spring Boot和Vue的权限管理系统.zip
- (源码)基于Python和HMM的酵母起始密码子预测系统.zip
- (源码)基于Spring Boot和MyBatis的图书管理系统.zip
- BitComet-2.11.0-x86_64.AppImage
- (源码)基于CC++编程语言的嵌入式游戏系统.zip