-5

int (*ip)[4]C++和int ip[4]C++之间有什么区别吗?

4

2 回答 2

4

int (*ip)[4]C++和int ip[4]C++之间有什么区别吗?

是的,int (*a)[4]是一个指向 4 个整数数组的指针,而int b[4]是一个 4 个整数数组。请注意,这a不是一个数组,它只是一个指针。这是一个例子:

int main()
{
    int a[5] = {2, 3, 6, 8, 10};
    int (*b)[5] = &a; // assign the address of the array to the pointer

    b[2] = 4; // dereferences the pointer and assigns a[2] to 4
}

另一个区别是您可以将指向数组的指针作为参数传递给函数,而无需进行数组到指针的转换。

void f( int (*array)[5] ); // must have a size of 5

int main()
{
    int a[10],
        b[5];

    f(&a); // NO
    f(&b); // Okay
}

您可以通过使用对数组的引用来避免传递地址。它与普通引用具有相同的语义,因此您可以在签名中简单地替换*为 with 。&而你会改为f(a)and f(b)

于 2013-04-07T01:46:17.177 回答
0

int (*ip)[4]with之间的区别与 say和int ip[4]之间的区别相同。一般来说,它与任何类型之间的区别相同。即前者声明了某种类型的对象,而后者声明了一个指向该类型对象的指针。int iint *iT tT *tTTT

从语法上看并不明显,但确实如此。为了进一步说明,这些您的原始声明

int (*ip1)[4];
int ip2[4];

可以替换为以下序列

typedef int FourIntsArray[4];

FourIntsArray *ip1; // <- same as `int (*ip1)[4]`
FourIntsArray ip2;  // <- same as `int ip2[4]`

后面的声明与您的原始声明完全相同。

于 2013-04-07T02:10:12.167 回答