【问题标题】:Normal array vs Array of pointers [closed]普通数组与指针数组[关闭]
【发布时间】:2014-07-11 22:10:29
【问题描述】:

与指针数组相比,使用普通数组有什么优势吗(反之亦然)?

什么时候应该使用指针数组,什么时候应该避免它?

在大学里,每个人似乎都对指针很着迷。我知道 std::vector 是一个简单的出路,但禁止在大学使用。我们现在被要求在没有 STL 的情况下解决问题。

我得到了 SO (link) 的答复,但答案出乎我的意料。

例如:使用int array[] 更好还是int* parray[] 更好?

【问题讨论】:

  • 什么是指针数组?
  • 顺便说一句,如果他们不让你在 C++ 课程中使用 C++ 标准库,他们基本上就是在逼你写 C。
  • 一个指针数组对我来说听起来像是一个多维数组......你的意思是:int * pointer = new int(5) vs int array[5]
  • @JosephMansfield 我们被严格要求只使用指针。
  • 如果问题是使用具体对象数组还是指向该对象的指针数组。我会选择第一个。总是尽量让你的记忆紧凑。

标签: c++ arrays pointers


【解决方案1】:

int array[] 是一个 int 数组。这意味着它将保存多个整数的集合。把它想象成一个包含许多整数的占位符。在 C++ 中使用int array[] 时,必须在使用前给它一个固定的大小:

int array[5]

并且大小将放在方括号[] 内,否则将无法编译并报错。使用这个普通数组的缺点是你必须先知道数组的大小,否则程序将无法运行。如果您的估计尺寸与实际使用不同怎么办?如果您的估计远大于实际值怎么办?这会消耗你很多内存。

int *array[] 在 C++ 中无效。如果您想在运行时不知道数组大小的情况下做一个指向数组的指针。这样做:

int *p;
int size;

cout << "How big is the size ?";
cin >> size;

p = new int[size];

这样,你不需要在运行前知道size的值,这样你就不会浪费内存了。

【讨论】:

  • 啊!现在更有意义了。我一直在等待这个答案!
  • (这个答案是怎么来的?以前没有过关)
  • @Hoang Minh:你的回答漏掉了一个很好的部分。
  • @deviantfan:我在有人关闭它之前发布了答案,但不确定发布者要求的内容,所以我删除了它,再次询问他并返回编辑我的答案。关于缺失的部分,您能详细说明一下吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2021-04-03
相关资源
最近更新 更多