int* p1;
只是一个指针。当与 new[] 一起使用时,它可以像数组或迭代器一样递增。很好,但是那是什么
int* p2[2];
看起来应该是一个指向有两个元素的数组的指针,对吧?但如果我创建一个二元素数组,我就无法指向它。无论如何,我找不到让 p2 指向某个东西的方法。以下很多内容只是尝试不同的作业,但 p2 = &arr 不起作用,这让我感到非常惊讶。那么什么是 int* [2] 以及它与 int (*) [2] 有何不同?
int main()
{
int arr[2];
int* p1; //pointer to int, can be used like an array
int* p2[2]; //pointer to an array
p1 = new int[2];
p1 = arr;
//p1 = &arr; //cannot convert ‘int (*)[2]’ to ‘int*’ in assignment
//p2 = &arr; //incompatible types in assignment of ‘int (*)[2]’ to ‘int* [2]’
//p2 = &p1; //incompatible types in assignment of ‘int**’ to ‘int* [2]’
//p2 = new int[2]; //incompatible types in assignment of ‘int*’ to ‘int* [2]’
//p2 = arr; //incompatible types in assignment of ‘int [2]’ to ‘int* [2]’
}
p2
是指向 int
的指针的 array,其大小为 2。您可以将
p1
存储在 p2
中:
p2[i] = p1;
如果您想要一个指向数组的指针,您将拥有:
int (*ptr)[2];
您可能想阅读螺旋规则,这是理解更详细的声明的简单方法。
不是一个相关的答案,但从我所在的地方看去,我笑了。无关紧要,但为了幽默而发帖。
int *total = &p1 + &p2; // Memory location and Potentially a Pointer Location