### c语言面试宝典知识点详解 #### 一、局部变量能否和全局变量重名? - **答案要点**:局部变量可以与全局变量同名,在函数内部局部变量会屏蔽全局变量的作用域。如果需要在函数内部访问全局变量,则需显式使用作用域解析运算符 "::"。 #### 二、如何引用一个已经定义过的全局变量? - **答案要点**:可以通过两种方式引用已定义的全局变量: - 使用 `extern` 关键字声明变量,这种方式不会重新定义变量,仅告诉编译器该变量在其他地方定义。 - 引用头文件,其中包含了全局变量的声明。如果在头文件中的变量名书写有误,编译器会在编译时报错;而使用 `extern` 关键字时,如果变量名书写有误,编译阶段不会报错,但在链接阶段会报错。 #### 三、全局变量可不可以定义在可被多个.C文件包含的头文件中? - **答案要点**:全局变量可以定义在被多个 `.C` 文件包含的头文件中,但为了避免重复定义错误,可以在多个 `.C` 文件中以 `static` 形式声明同名全局变量。这样,每个 `.C` 文件都有自己的局部副本,互不影响。 #### 四、语句 for(;1;) 的含义是什么? - **答案要点**:`for(;1;)` 等价于 `while(1)`,表示一个无限循环,循环体内的语句将持续执行,直到程序强制中断或外部条件使得循环终止。 #### 五、do...while 和 while...do 有何区别? - **答案要点**:`do...while` 循环至少执行一次,然后检查条件是否满足继续执行;`while...do` 循环则先检查条件是否满足,满足才执行循环体。两者的区别在于条件检查的时间点不同。 #### 六、代码输出内容分析 ```c #include <stdio.h> int main() { int a, b, c, d; a = 10; b = a++; // b = 10, a = 11 c = ++a; // c = 12, a = 12 d = 10 * a++; // d = 120, a = 13 printf("b,c,d:%d,%d,%d\n", b, c, d); return 0; } ``` - **答案要点**:这段代码的输出结果是 `b,c,d:10,12,120`。解释如下: - `b = a++;` 表示先赋值 `a` 的当前值给 `b`,之后 `a` 自增,所以 `b` 的值为 `10`。 - `c = ++a;` 表示先自增 `a` 的值,再赋值给 `c`,所以 `c` 的值为 `12`。 - `d = 10 * a++;` 同样先赋值 `a` 的当前值乘以 `10` 给 `d`,之后 `a` 自增,所以 `d` 的值为 `120`。 #### 七、static 全局变量与普通全局变量的区别 - **答案要点**: - **static 全局变量**:作用域局限于定义它的源文件内部,避免了在其他源文件中引起的命名冲突。 - **普通全局变量**:在整个源程序中都是有效的,可能在不同的源文件中引发冲突。 #### 八、static 局部变量与普通局部变量的区别 - **答案要点**: - **static 局部变量**:生命周期覆盖整个程序执行过程,只被初始化一次。 - **普通局部变量**:每次进入函数时都会被重新创建和初始化。 #### 九、static 函数与普通函数的区别 - **答案要点**: - **static 函数**:作用域局限于当前源文件,仅在该文件内部可见。 - **普通函数**:作用域在整个程序范围内,可以被其他源文件访问。 #### 十、数据存储区域 - **答案要点**: - 局部变量存在于 **堆栈** 中。 - 全局变量存在于 **静态区** 中。 - 动态申请的数据存在于 **堆** 中。 #### 十一、结构体与联合体大小计算 ```c typedef union { long i; int k[5]; char c; } DATE; struct data { int cat; DATE cow; double dog; } too; DATE max; ``` - **答案要点**:`DATE` 是一个联合体,成员共用同一段内存,其中最大的成员类型是 `int[5]`,占用 20 字节(假设 `int` 占用 4 字节)。`struct data` 中成员分别占用独立内存空间,总大小为 `int 4 + DATE 20 + double 8 = 32` 字节。因此,`sizeof(struct data) + sizeof(max)` 的结果为 `52` 字节。 #### 十二、队列与栈的区别 - **答案要点**:队列是一种先进先出(FIFO)的数据结构,新元素加入队尾,删除操作发生在队首。栈是一种后进先出(LIFO)的数据结构,元素的加入和移除都在栈顶进行。 #### 十三、预处理指令 #define 声明常数 ```c #define SECONDS_PER_YEAR (60*60*24*365)UL ``` - **答案要点**: - 使用 `#define` 声明一个常数 `SECONDS_PER_YEAR`,表示一年中的秒数(忽略闰年问题)。 - 注意 `#define` 语句末尾不加分号。 - 使用圆括号来确保表达式的正确优先级。 - `UL` 表示无符号长整型。 - 预处理器将计算常数表达式的实际值。




























剩余63页未读,继续阅读


- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 屋面工程施工防渗漏预控措施含图.doc
- 单片机课程设计-彩灯控制器设计.docx
- 转型时期U校园教学平台的信息化教学应用研究.docx
- web人事管理.doc
- 卫生器具排水管道安装工程检验表5.doc
- 关于网上居间“交房保证金”和定金转.docx
- 厦门监理公司给排水作业指导书p.doc
- 第十一章其它工程程材料.ppt
- 变电站质量通病防治措施.doc
- 6-粗纤维的含量测定.doc
- 新红皮书第2条.ppt
- 某市过河钢筋砼过河顶管施工方案.doc
- 基于安卓仿真的支付宝云数据取证方法.docx
- BIM施工方案-(2).pdf
- 基于大数据背景下电力企业财务风险的防控研究.docx
- 小区VOD视频点播系统.doc


