华为C++面试题解析

需积分: 9 0 下载量 67 浏览量 更新于2024-07-18 收藏 488KB PDF 举报
华为 C++ 面试题详解 以下是对华为 C++ 面试题的详细解释: **1. 局部变量能否和全局变量重名** 答案:能,局部会屏蔽全局。要用全局变量,需要使用"::" 解释:在 C++ 中,局部变量和全局变量可以同名,局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。例如: ```cpp int x = 10; // 全局变量 void foo() { int x = 20; // 局部变量 cout << x << endl; // 输出 20 } ``` 在上面的例子中,局部变量 x 会屏蔽全局变量 x。要使用全局变量,需要使用作用域解析运算符 "::",例如: ```cpp int x = 10; // 全局变量 void foo() { int x = 20; // 局部变量 cout << ::x << endl; // 输出 10 } ``` **2. 如何引用一个已经定义过的全局变量** 答案:extern 解释:可以使用 extern 关键字来引用已经定义过的全局变量。例如: ```cpp // header.h extern int x; // main.cpp int x = 10; // 定义全局变量 void foo() { cout << x << endl; // 输出 10 } ``` 在上面的例子中,我们在 header.h 中使用 extern 关键字来声明全局变量 x,然后在 main.cpp 中定义该变量。在 foo 函数中,我们可以使用该变量。 **3. 全局变量可不可以定义在可被多个 .C 文件包含的头文件中** 答案:可以,在不同的 C 文件中以 static 形式来声明同名全局变量。 解释:在不同的 C 文件中,可以声明同名的全局变量,但需要使用 static 关键字来限定其作用域。例如: ```cpp // a.cpp static int x = 10; // b.cpp static int x = 20; ``` 在上面的例子中,我们在 a.cpp 和 b.cpp 中声明了同名的全局变量 x,但使用 static 关键字来限定其作用域,使得它们不会冲突。 **4. 语句 for(;1;)有什么问题它是什么意思** 答案:和 while(1) 相同。 解释:语句 for(;1;) 等同于 while(1),都是一个无限循环。例如: ```cpp for (; 1;) { cout << "Hello, world!" << endl; } ``` 上面的代码将无限循环地输出 "Hello, world!"。 **5. do……while 和 while……do有什么区别** 答案:前一个循环一遍再判断,后一个判断以后再循环 解释:do-while 语句和 while 语句的主要区别在于循环的执行顺序。do-while 语句先执行循环体,然后判断条件,而 while 语句先判断条件,然后执行循环体。例如: ```cpp int i = 0; do { cout << i << endl; i++; } while (i < 5); int j = 0; while (j < 5) { cout << j << endl; j++; } ``` 在上面的例子中,do-while 语句先执行循环体,然后判断条件,而 while 语句先判断条件,然后执行循环体。 **6. 请写出下列代码的输出内容** 答案:10, 12, 120 解释:该代码使用了自增运算符和printf 函数。自增运算符的优先级高于赋值运算符,因此 a++ 的值将被赋值给 b,++a 的值将被赋值给 c,10*a++ 的值将被赋值给 d。最终输出的结果为 10, 12, 120。 **7. static 全局变量与普通的全局变量有什么区别** 答案:static 全局变量的作用域限制在定义该变量的源文件内,而普通的全局变量的作用域是整个源程序。 解释:static 全局变量和普通的全局变量的主要区别在于作用域。static 全局变量的作用域限制在定义该变量的源文件内,而普通的全局变量的作用域是整个源程序。例如: ```cpp // a.cpp static int x = 10; // b.cpp int x = 20; ``` 在上面的例子中,static 全局变量 x 的作用域限制在 a.cpp 中,而普通的全局变量 x 的作用域是整个源程序。