C语言经典面试题目集锦
这份资源摘要信息包含了C语言经典面试题目集锦,涵盖了C语言的基本概念、语法、数据类型、操作符、控制结构、函数、数组、指针、结构体、枚举、文件输入/输出等方面的知识点。
1. 声明和初始化
* 2.1 我如何决定使用那种整数类型?:在C语言中,整数类型可以根据实际情况选择,例如整数的大小、范围、是否带符号等。
* 2.2 64 位机上的 64 位类型是什么样的?:在64位机器上,整数类型可以是64位的,例如long long int类型。
* 2.3 怎样定义和声明全局变量和函数最好?:全局变量和函数可以在头文件中声明,然后在源文件中定义。
* 2.4 extern 在函数声明中是什么意思?:extern关键字用于声明外部函数或变量,表示该函数或变量在其他文件中定义。
* 2.5 关键字 auto 到底有什么用途?:auto关键字用于自动变量的存储类别,表示变量的存储位置在栈上。
2. 结构、联合和枚举
* 3.1 声明 struct x1 { ...}; 和 typedef struct { ...} x2; 有什么不同?:前者声明了一个结构体类型,后者声明了一个typedef别名。
* 3.2 为什么 struct x { ...}; x thestruct; 不对?:因为结构体变量需要指定类型,例如struct x thestruct;
* 3.3 一个结构可以包含指向自己的指针吗?:可以,但需要使用指针类型来声明。
* 3.5 在 C 中是否有模拟继承等面向对象程序设计特性的好方法?:C语言不直接支持面向对象编程,但可以使用结构体和函数指针来模拟继承。
3. 表达式
* 4.1 为什么这样的代码 : a[i] = i++; 不能工作?:因为赋值语句中,数组索引的计算顺序不确定。
* 4.2 使用我的编译器 ,下面的代码 int i=7; printf("%d\n", i++ * i++); 返回 49 ?:因为赋值语句中的计算顺序不确定。
* 4.3 对于代码 int i = 3; i = i++; 不同编译器给出不同的结果,哪个是正确的?:因为赋值语句中的计算顺序不确定。
4. 文件输入/输出
* 3.9 怎样从 /向数据文件读 /写结构?:使用文件输入/输出函数,例如fread和fwrite。
5. 其他
* 2.6 我似乎不能成功定义一个链表。我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道在C 语言中一个结构不能包含指向自己的指针吗?:可以,但需要使用指针类型来声明。
* 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充 ? :因为结构体成员的对齐方式可能导致填充字节的存在。