int * [2]是什么样的变量?如声明 int* p2[2]

问题描述 投票:0回答:4
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]’


}
c++ arrays pointers
4个回答
4
投票

一个由 2 个元素组成的数组,每个元素都是一个指向

int
的指针。

cdecl.org 是您完成这些任务的朋友:


0
投票

p2
是指向 int 的指针的
array
,其大小为 2。您可以将
p1
存储在
p2
中:

p2[i] = p1; 

如果您想要一个指向数组的指针,您将拥有:

int (*ptr)[2];

您可能想阅读螺旋规则,这是理解更详细的声明的简单方法。


0
投票

破译看似复杂的声明的一个便捷方法是从右向左阅读:

int* p2[2];

如果您从右向左读取,您将得到:包含两个指向

int
的元素的数组。


0
投票

不是一个相关的答案,但从我所在的地方看去,我笑了。无关紧要,但为了幽默而发帖。

    int *total = &p1 + &p2; // Memory location and Potentially a Pointer Location
© www.soinside.com 2019 - 2024. All rights reserved.