int * array [60]和int * array = new int(60)之间的区别;

时间:2016-07-12 02:28:12

标签: c++ arrays pointers

int * array[60]; //creates an array of 60 pointers to an int
int * array = new int(60); //same thing?

这两者都会产生相同类型的数组吗?例如指向整数的指针数组

我知道第一个未初始化,第二个初始化,但我不确定第二个创建的是什么。

5 个答案:

答案 0 :(得分:11)

int * array = new int(60); //same thing?

不,他们不是一回事。 array只是一个指针,然后指向一个初始值为60的int。

如果您的意思是int * array = new int[60];array将指向60个整数的数组,它们仍然不是一回事。

请注意,正如声明一样,int* array表示它是指针,而int* array[60]表示它是数组(60个指针) )。 (数组可能会衰减为指针,即int**的{​​{1}},它与int* array[60]不同。)

答案 1 :(得分:2)

也许您没有意识到第二种情况不是数组,以下程序打印60

#include <iostream>

int main() {
    int* foo = new int(60);
    std::cout << *foo << '\n';
    return 0;
}

答案 2 :(得分:0)

以下两张图片说明了

之间的区别
int * array[5]; 

int * array = new int(5);

要创建指针int 数组,请使用int * array = new int[5];

code

debug view

答案 3 :(得分:0)

其中一个创建了一个数组,另一个没有创建。

int * array[60]; // Creates an array of 60 integer pointers

答案 4 :(得分:-1)

为了帮助理解差异,请考虑第一行在内存中创建一个60指针块(例如,如果你在main中,则在堆栈中),但第二行只是一个指针块。

两者都是完全不同的类型。例如,尝试以下操作:

array++;

在第一行中,它不起作用。在第二个,没关系。如果您尝试:

array[0]++;

在第一行中更改第一个指针,在第二行中将1添加到整数(更改为61)。