int * array[60] 和 int * array = new int(60);之间的区别
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[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)。
相关文章:
- 如何从map<pair<string,int>,pair<string,Array>>中迭代和查找?
- 如何将 int[4] 转换为 std::array<int,4>?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何就地构造 std::map<int, std::array<Class, 2>>?
- 如何从方法返回静态常量 int std::array?
- 尝试使用 const int std::array 时出错
- Visual Studio 不采用 array: int magicSquare[n][n]?
- 混淆从"array of int[]"到"pointer to int"的显式衰减?
- 为什么我们不能将 int array[] 传递给 hoo(int* &p)?
- "Converting" 从 int[] 到 std::array at fread?
- Int Array[]打印不好
- 从 int 转换为 std::array<unsigned char, 1ul>::value_type 可能会改变其值
- 为什么 new int[n] 有效,而 int array[n] 无效
- 带有参数的 func return list (int arry[int]<int>, int array[int])
- iPhone SDK 2d int array
- 为什么是 int array[][20]
- int * array[60] 和 int * array = new int(60);之间的区别
- Int *array = new Int [n];这个函数到底在做什么
- 错误 LNK2001:未解析的外部符号"int * array"