这是我面临的一次求职面试。他们问我们是否可以重新分配数组,我说可以。然后他们问 - 为什么我们需要指针,因为大多数人给出了它浪费内存空间的理由。我无法给出满意的答复。如果任何机构能给出满意的答复,我将不胜感激。请提及与上述陈述可能相矛盾的任何情况。
谢谢你。
这是我面临的一次求职面试。他们问我们是否可以重新分配数组,我说可以。然后他们问 - 为什么我们需要指针,因为大多数人给出了它浪费内存空间的理由。我无法给出满意的答复。如果任何机构能给出满意的答复,我将不胜感激。请提及与上述陈述可能相矛盾的任何情况。
谢谢你。
您只能重新分配动态分配的数组。如果它是静态分配的,则无法[安全地]重新分配。*
指针在内存中保存数据的地址。它们可以使用 C++ 中的 new/delete 运算符和 C 中的 malloc/free 动态分配、解除分配和重新分配。
我强烈建议您阅读Kernighan 和 Ritchie 的The C Programming Language以及Herbert Schildt的 C++ From the Ground Up等可靠的 C++ 文本。
使用动态内存、指针、偏移量等都是使用这两种语言的基础。不知道它们是如何工作的,以及它们存在的原因可能是潜在雇主拒绝你的一个原因。
*编译器不应让您重新分配静态分配的任何内容,但如果这样做,则行为未定义
措辞有点奇怪,但对我来说,面试问题似乎是一个开放式问题,旨在让你解释你对数组、指针、动态内存分配等的了解。如果我是面试官,我想要候选人阐明int *a = malloc(10 * sizeof(int));
和之间的区别int a[10];
。后续问题的措辞不是很好,但它可能是试图在指针和数组之间的差异方向上推动候选人并引发思路。
好的。您不能重新分配已静态声明的数组。使用指针(而不是静态声明的数组)的目的是让您可以重新分配空间。我想,从技术上讲是正确的,您可以通过将指针传递给静态定义的数组来重新分配它,但我不想这样做。如果指针指向不是由 malloc 分配的内存,则行为未定义。
我真的不明白使用指针如何“浪费内存”。realloc 函数: -
void *realloc(void *ptr, size_t size);
将指向内存的指针作为参数调整大小。此外,指针的用途比动态内存多得多,例如通过引用传递。