new int()和new int []之间的区别是什么

时间:2017-09-17 01:13:15

标签: c++ arrays dynamic

int main()
{
  int *y = new int(5);
  cout << "y = " << y << " &y = " << &y << " *y = " << *y << endl;
  int *p = new int[5];
  cout << "p = " << p << " &p = " << &p << " *p =" << *p << endl;
}

一个用过[]而另一个用过(),有什么不同以及它是如何工作的?有人可以帮我解释一下吗?谢谢!

2 个答案:

答案 0 :(得分:0)

您在std::cout中输出了很多内容,但大多数内容并不重要。

std::cout << sizeof(int(5)) << " " << sizeof(int[5]) << "\n";

将输出

4 20

因为int(5)表示用5初始化的单个整数。因此sizeof会产生int的大小。

另一方面,int[5]是您所期望的:一个包含5个整数的数组,因此sizeof会产生5*sizeof(int)

还有两个评论:

  • 使用new创建好的旧数组绝对是初学者应该避免的。如果您需要动态调整大小的可索引存储空间,请使用std::vector。没有速度的消息。
  • 避免using namespace std;只需输入std::,这样可以使代码更具可读性,并清楚地将您的内容与库内容分开。

答案 1 :(得分:0)

int *y = new int(5)

这会分配一个int并将其值设置为5,然后指定y指向已分配的int

int *p = new int[5]

这将分配一个5 int s的数组,其值最初未定义,然后指定p指向分配的数组中的第一个int