在C/C++编程语言中,面试常常涉及到一些基础但至关重要的知识点,比如`sizeof`和`strlen`的区别、`malloc`与`new`的不同以及数组和指针的使用。下面我们将详细探讨这些主题。 `sizeof`和`strlen`是两个在处理内存和字符串时经常用到的工具。`sizeof`是一个操作符,它在编译时计算表达式或类型的字节数。例如,对于一个整型变量`n`,`sizeof(n)`将返回4个字节(假设在32位系统中),即使`n`的值未定义。对于数组,`sizeof`会返回整个数组的大小,包括末尾的空字符在内。例如,字符串`"Hello"`的`sizeof`结果是6,因为除了5个字母外,还有一个用于表示字符串结束的`\0`字符。而`strlen`是一个库函数,用于计算不包含结束符的字符串的实际长度,因此`strlen("Hello")`的结果是5。 接下来,我们来看看`malloc`和`new`的区别。在C语言中,`malloc`用于动态分配内存,它返回一个`void`指针,需要强制类型转换后才能使用。分配的内存没有经过初始化,也不会调用构造函数。与之对应,`free`用于释放由`malloc`分配的内存。而在C++中,`new`是一个操作符,它不仅能分配内存,还能调用对象的构造函数,创建一个已初始化的对象。对应的`delete`操作符则会先调用析构函数,然后释放内存。由于`new`和`delete`是操作符,它们可以被重载以提供自定义的内存管理行为。 当我们处理数组时,需要注意一个重要细节:如果数组作为函数参数传递,它会被当作指针处理。例如,`sizeof`在函数内部计算数组参数时,只会返回指针的大小,而不是整个数组的大小。这意味着在函数`Func(char str[100])`中,`sizeof(str)`实际上是4字节,因为它被视为指向`char`的指针。 面试题8中,`a`和`&a`的区别在于,`a`是变量的值,而`&a`是变量`a`的地址,即它的内存位置的引用。在内存模型中,`a`代表的是存储在某个地址上的值,而`&a`则是这个地址本身。 面试中,理解这些基本概念至关重要,因为它们构成了C/C++程序设计的基础。熟练掌握这些知识点,可以帮助程序员编写更高效、更安全的代码,并在面试中表现出扎实的编程功底。