C语言面试:算法与数据结构在大公司面试中的应用

4星 · 超过85%的资源 需积分: 0 78 下载量 76 浏览量 更新于2024-12-02 1 收藏 34KB DOC 举报
局部变量能否和全局变量重名?答:在C语言中,是允许局部变量与全局变量重名的。当在函数内部定义一个与全局变量同名的局部变量时,局部变量会屏蔽全局变量。这意味着在该函数内部使用这个变量名时,实际引用的是局部变量,而不是全局变量。如果想要在函数内部访问全局变量,可以使用作用域解析运算符`::`,例如`全局变量名::变量名`。 如何引用一个已经定义过的全局变量?答:可以通过两种方式引用全局变量。第一种是在包含该全局变量定义的头文件中使用`#include`指令,这样编译器会在编译时找到全局变量的定义。另一种方式是使用`extern`关键字来声明全局变量,这告诉编译器变量在其他地方已经被定义。例如:`extern int 全局变量名;`。如果在头文件中错误地书写了全局变量名,在使用`#include`方式时编译阶段就会报错;而使用`extern`方式时,错误将在链接阶段暴露。 全局变量可不可以定义在可被多个.C文件包含的头文件中?答:可以,但为了防止命名冲突,通常建议在每个.C文件中使用`static`关键字声明同名的全局变量。这样,每个.C文件都有自己的独立实例,而不会在链接时产生冲突。例如,在多个.C文件中声明`static int 全局变量名;`。 语句`for(;1;)`有什么问题?它是什么意思?答:`for( ; 1 ; )`与`while(1)`等价,表示一个无限循环,因为条件表达式`1`始终为真,所以循环会一直执行,直到有显式的`break`语句退出循环。 `do...while`和`while...do`的区别?答:两者都是循环结构,但执行顺序不同。`do...while`循环先执行一次循环体,然后再检查条件是否满足,如果满足则继续循环,否则结束。`while...do`则是先检查条件,只有条件满足时才执行循环体,所以`do...while`至少会执行一次循环体。 以下代码的输出内容: ```c #include<stdio.h> int main() { int a, b, c, d; a = 10; b = a++; // b = 10 c = ++a; // a = 11, c = 11 d = 10 * a++; // a = 12, d = 120 printf("b, c, d: %d, %d, %d", b, c, d); return 0; } ``` 输出结果:`b, c, d: 10, 11, 120` `static`全局变量与普通的全局变量有什么区别?`static`局部变量和普通局部变量有什么区别?`static`函数与普通函数有什么区别? 1. 静态全局变量(`static`全局变量)仅在定义它的源文件内可见,不会被其他源文件访问,限制了作用域。 2. 静态局部变量(`static`局部变量)在函数调用结束后仍保留其值,下次调用同一函数时,会接着上次的值继续使用。而普通局部变量每次函数调用都会初始化为默认值或指定的初始值。 3. 静态函数(`static`修饰的函数)仅在其定义的源文件内可见,不能被其他源文件直接调用,提供了封装性,有助于避免命名冲突。普通函数可以在任何地方被调用,只要能访问到它的定义。