华为面试笔试题解析:C语言与指针

5星 · 超过95%的资源 需积分: 50 34 下载量 78 浏览量 更新于2024-11-17 2 收藏 81KB DOC 举报
"华为面试和笔试的C语言题目及答案,包括预编译的作用、指针类型的区分、字符串数组比较以及sizeof的使用注意事项" 在准备华为的面试和笔试时,了解并掌握C语言的基本概念和关键点至关重要。下面将详细讨论这些题目中涉及的知识点。 1. **预编译**: 预编译是编译过程的一个阶段,主要处理以`#`开头的预处理器指令,例如`#include`和`#define`。它发生在编译器真正解析源代码之前,用于提升编译效率。当代码包含大量不变的头文件,或者多个源文件共享相同的配置时,预编译能显著减少编译时间。预编译头文件(通常以`.pch`为扩展名)可以被创建并用于存储预编译的结果,这样在后续编译中就无需重复处理这些内容。 2. **指针与常量**: - `char*const p`:这里的`p`是一个常量指针,意味着指针的值(即它所指向的地址)不能改变,但可以通过`p`修改所指向的字符。 - `char const *p`:这个表示指向常量的指针,意味着`p`可以改变,但不能通过`p`修改它所指向的字符。 - `const char *p`:与上面相同,常量指针,不可通过`p`改变所指字符,但`p`本身的值可变。 3. **字符串数组比较**: 在C语言中,字符串实际上是一系列字符的数组,以空字符`\0`结束。题目中的`str1`到`str8`代表不同类型的字符串。在C++中,字符串数组`str1`、`str2`、`str3`和`str4`分别在不同的内存位置,因此即使是相同的字符串内容,它们的地址也是不同的,所以比较结果为0(不相等)。而`str5`、`str6`、`str7`和`str8`都是指针,它们可能指向同一块常量内存区域,因此对于相同的字符串,它们的比较结果可能是1(相等)。 4. **sizeof的使用**: 在C语言中,`sizeof`运算符用于计算表达式的大小(以字节为单位)。在函数`UpperCase`中,`sizeof(str)`在函数内部的用法是错误的。由于`str`作为参数传递,实际上是传递了其首地址,而不是整个数组。因此,函数内部的`sizeof(str)`将返回指针的大小(通常是4字节或8字节),而不是字符串的实际长度。正确计算字符串长度的方法是在函数外部使用`sizeof(str)/sizeof(str[0])`,因为它会返回整个数组的元素个数。 这些题目体现了C语言的基础知识,包括指针、字符串操作、预处理和类型修饰。在面试和笔试中,理解并能够灵活应用这些概念是非常重要的。对于华为这样的技术公司,扎实的C语言基础是程序员岗位的必备技能之一。