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

Difference between int * array[60] and int * array = new int(60);

本文关键字:int array 之间 区别 new      更新时间:2023-10-16
int * array[60]; //creates an array of 60 pointers to an int
int * array = new int(60); //same thing?

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

我知道第一个未初始化,第二个初始化,但我不确定第二个到底创造了什么。

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

不,它们不是一回事。 array在这里只是一个指针,然后指向一个初始化值为 60 的 int

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

请注意,就像声明一样,int* array表示它是一个指针,而int* array[60]表示它是一个数组(由 60 个指针组成)。(数组可能会衰减到指针,即 int**对于int* array[60]来说,它与int*不一样。

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

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

这里有两张图片说明了两者之间的差异

int * array[5]; 

int * array = new int(5);

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

法典

调试视图

其中一个创建一个数组,另一个不创建一个数组。

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

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

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

array++;

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

array[0]++;
在第一行中,

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