C语言面试题目汇总(基础知识)
出内容: ```c #include <stdio.h> int main(void) { int a, b, c, d; a = 10; b = a++; c = ++a; d = 10 * a++; printf("b, c, d: %d, %d, %d", b, c, d); return 0; } ``` 答:这段代码的输出是 `b, c, d: 10, 11, 120`。 **知识点解析:** 1. **局部变量与全局变量的关系**:局部变量在函数内部定义,其作用域仅限于定义它的函数内部,当函数结束,局部变量会被销毁。如果全局变量和局部变量同名,局部变量会遮蔽全局变量,但可以通过全局作用域运算符`::`来访问全局变量。 2. **全局变量的声明与使用**:全局变量可以在任何地方被引用,但为了避免命名冲突,可以使用`extern`关键字在需要的地方声明全局变量,或者通过包含包含该变量声明的头文件。如果在多个C文件中定义同名全局变量,必须确保只有一个文件对其进行初始化,否则链接时会产生错误。 3. **静态全局变量**:静态全局变量的作用域仅限于定义它的源文件,不会被其他源文件访问。它们只初始化一次,即使在多个函数调用之间,其值也会保持。 4. **静态局部变量**:与普通局部变量相比,静态局部变量只在定义它的函数第一次调用时初始化,并且在后续调用中保留上次的值。这样可以实现局部变量的持久化。 5. **静态函数**:静态函数的作用域仅限于定义它的源文件,不能被其他文件引用。它们主要用于封装和隐藏函数,提高代码的封装性。 6. **内存区域划分**:程序中的局部变量存储在栈中,生命周期短,随函数调用结束而释放;全局变量和静态变量存储在静态区,生命周期贯穿整个程序运行;动态申请的数据存储在堆中,需要程序员手动释放。 7. **结构体与联合体的区别**:结构体内的成员各自占用独立的空间,而联合体内的所有成员共享同一块内存空间。在本例中,`sizeof(union DATE)`返回的是最大成员`int[5]`的大小,即20字节。`sizeof(struct data)`是结构体内各成员大小之和,即4(int)+ 20(DATE)+ 8(double)= 32字节。所以总输出是52字节。 8. **队列与栈的区别**:队列遵循先进先出(FIFO,First In First Out)原则,数据的插入发生在一端(尾部),删除发生在另一端(头部)。而栈遵循后进先出(LIFO,Last In First Out)原则,数据的插入与删除都在同一端进行,也称为“后顶推前出”。 9. **代码示例解析**:此代码中,`a`首先被赋值为10,然后`b`被赋值为`a`的原始值10,`a`自增变为11;接着`c`被赋值为自增后的`a`,即11;最后`d`是`a`自增后的值12乘以10,得到120。在`printf`中,`b`的值为10,`c`的值为11,`d`的值为120。
剩余49页未读,继续阅读
- zywtheno12013-08-26挺基础,但是挺好,人家要的就是基础知识。
- panda_high2018-05-09很久之前下载的,现在回来评论,谢谢分享
- liuyongai2014-06-03基础的好像不多
- 粉丝: 45
- 资源: 27
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助