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

需积分: 4 1 下载量 114 浏览量 更新于2024-09-13 收藏 29KB TXT 举报
"华为面试题" 在华为的面试中,可能会涉及到各种技术问题,这有助于评估候选人的专业技能和解决问题的能力。以下是一些可能出现在华为面试中的C++编程相关的知识点: 1. 枚举(枚举类型):枚举是定义一组具有特定名称的常量的类型,通常用于表示一组有限的、相关的值。在C++中,枚举可以是强类型的,即不能隐式转换为其他类型,从而增加了代码的可读性和安全性。 2. 指针的const修饰:`const`关键字可以用来限定指针的指向内容不可变或指针本身不可变。例如: - `char* const p`:指针p的值(即它所指向的地址)不可变,但指针p指向的内容可以修改。 - `char const *p`:指针p指向的内容不可变,但p的值可以改变,指向其他位置。 - `const char *p`:同上,p指向的内容不可变。 3. 字符串比较:在C++中,字符串实际上是以字符数组的形式存在的。`str1 == str2`这样的比较操作实际上是检查两个字符串的内存地址是否相同,而非内容。因此,对于数组`str1`和`str2`,如果它们初始化为相同的字符序列,其内存地址不同,所以比较结果为0。而`str5`和`str6`是常量字符串,它们在内存中可能被优化为共享同一存储空间,所以比较结果为1。 4. sizeof运算符:`sizeof`运算符返回变量或类型所占用的字节数。在C++中,对于数组,`sizeof(str)`会返回整个数组的大小,包括结束的空字符'\0'。因此,对于字符串`str`,即使字符串长度为5,其`sizeof(str)`的结果是6。 5. 对齐规则:在计算机系统中,数据对齐是为了提高存取效率。对于32位系统,通常要求数据存储在4字节的边界上。这意味着如果一个变量的自然对齐长度小于4,它依然会按照4字节对齐。对于大于4字节的数据类型,如某些平台上的`long double`,它们可能需要更大的对齐规则,比如8字节对齐。 6. 指针运算:指针可以用来访问数组元素。在表达式`*(a+1)`中,`a+1`表示数组a的第二个元素,然后星号(*)解引用这个地址,得到对应的值,即2。而在`*(ptr-1)`中,`ptr-1`表示从ptr所指向的位置向前偏移一个元素的地址,对于整型数组,这意味着回到数组a的最后一个元素(a[4]),解引用后得到5。在`main`函数的示例中,`ptr`实际上是`(int*)(&a+1)`,它指向了数组a的下一个内存位置,相当于`a+5`,所以`*(ptr-1)`相当于`a[4]`。 以上知识点是C++编程中常见的基础概念,在华为的面试中,理解并能灵活运用这些知识是非常重要的。通过深入理解和实践这些内容,可以帮助候选人更好地应对面试挑战。