【发布时间】:2010-09-17 03:31:42
【问题描述】:
这是我面临的一次求职面试。他们问我们是否可以重新分配数组,我说可以。然后他们问 - 为什么我们需要指针,因为大多数人给出了它浪费内存空间的理由。我无法给出满意的答复。如果有人能给出满意的答复,我将不胜感激。如有与上述说法相矛盾的情况,请提及。
谢谢。
【问题讨论】:
标签: c++ c pointers data-structures
这是我面临的一次求职面试。他们问我们是否可以重新分配数组,我说可以。然后他们问 - 为什么我们需要指针,因为大多数人给出了它浪费内存空间的理由。我无法给出满意的答复。如果有人能给出满意的答复,我将不胜感激。如有与上述说法相矛盾的情况,请提及。
谢谢。
【问题讨论】:
标签: c++ c pointers data-structures
您只能重新分配动态分配的数组。如果是静态分配的,则无法[安全]重新分配。*
指针在内存中保存数据的地址。它们可以使用 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);
将指向要调整大小的内存的指针作为参数。此外,指针的用途比动态内存多得多,例如通过引用传递。
【讨论】: