[英]Difference between int * array[60] and int * array = new int(60);
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[60]; // Creates an array of 60 integer pointers
为了帮助理解差异,请考虑第一行在内存中创建一个60指针块(例如,如果你在main中,则在堆栈中),但第二行只是一个指针块。
两者都是完全不同的类型。 例如,尝试以下操作:
array++;
在第一行,它不起作用。 在第二个,没关系。 如果你试试:
array[0]++;
在第一行中,您更改第一个指针,在第二行中,您将1添加到整数(更改为61)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.