【华为校园招聘笔试题解析】
1. **变量作用域与全局变量**
- 在C语言中,局部变量可以在函数内部定义,与全局变量同名。局部变量会屏蔽全局变量,即在函数内部引用该变量时,使用的是局部变量。如果需要访问全局变量,可以使用作用域解析运算符`::`。
- 局部变量可以在不同的函数中重复定义,其作用域仅限于定义它的函数或代码块。
2. **全局变量引用**
- 引用已定义的全局变量,可以通过在源文件中包含对应的头文件或者使用`extern`关键字。头文件包含方式若变量名写错,编译时会报错;`extern`方式则在编译时不检查,链接时才会报错。
3. **全局变量的定义**
- 全局变量可以定义在多个.C文件包含的头文件中,但为了避免命名冲突,通常会使用`static`关键字来声明同名全局变量,每个.C文件中一个。
4. **无限循环语法**
- `for(;1;)`和`while(1)`都是表示无限循环,它们之间的区别在于循环条件的检查时机,`for`循环先执行一次循环体再检查条件,`while`循环先检查条件再执行循环体。
5. **do...while与while...do的区别**
- `do...while`循环至少执行一次循环体,然后检查条件;`while...do`先检查条件,条件满足才执行循环体。
6. **代码输出**
- 给定的代码段中,`a++`和`++a`的使用会导致输出结果为`b, c, d: 10, 12, 120`。
**判断题解析:**
1. `a[0][1]`的值应该是2,因为在二维数组初始化时,`a[0][1]`未指定值,默认为0。
2. `ptr`是一个指向函数的指针,不是一个一维数组的名字。
3. 指针可以进行比较运算,但不能进行算术运算如加减。
4. `switch`语句中的`c`不能是`float`,因为`switch`不支持浮点类型。
5. `#define`宏定义的`print(x)`会在编译时替换,可以用于格式化打印。
**填空题解析:**
1. `sizeof(str)`是字符串数组的大小,为6(含结束符),`sizeof(p)`是指针的大小,通常是4或8字节,`sizeof(n)`是`int`的大小,通常是4字节。在函数中,`sizeof(str)`取决于参数传递,一般还是4字节,因为传递的是指针。
2. `test`函数中,`getmemory`分配内存并赋值,但未释放,可能导致内存泄漏,输出`hello`。
3. 代码修改后的输出依赖于编译器的内存布局和指针操作的顺序,通常输出可能是`8,8`,但也可能是`7,8`或`8,9`。
**编程题解析:**
1. 编写`strcmp`函数,实现字符串比较,返回值表示字符串的相对顺序。
2. 写`fun`函数,判断字符串是否为回文,返回1为回文,0为非回文,-1为错误。
**其他问题:**
1. OSI模型有七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层;TCP/IP模型有四层,分别为网络接口层、网络层、传输层和应用层。
2. IP协议在TCP/IP模型的网络层,主要负责数据包的路由和传输;TCP和UDP在传输层,TCP提供面向连接的、可靠的通信,UDP提供无连接的、不可靠的通信。
3. 交换机基于MAC地址进行数据帧的交换,工作在网络层之下;路由器基于IP地址进行数据包的转发,工作在网络层。
4. C++的类与C语言的struct主要区别在于,类支持封装、继承和多态,具有方法(成员函数),而struct主要用来组织数据。
5. 析构函数是在对象生命周期结束时自动调用的函数,用于清理资源;虚函数允许动态绑定,实现多态性,使得基类指针可以调用派生类的成员函数。
这些题目涵盖了编程基础、C/C++语言特性和网络协议等知识,是华为校园招聘笔试中常见的技术考察点。准备此类考试时,需要扎实掌握基本概念和编程技能,并对计算机网络、数据结构和算法有所了解。