int (*ip)[4]与int ip[4]的区别

Difference between int (*ip)[4] with int ip[4]?

本文关键字:int ip 区别      更新时间:2023-10-16

在c++中int (*ip)[4]int ip[4]有什么区别吗?

c++中int (*ip)[4]int ip[4]有什么区别吗?

是的,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
}

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

int (*ip)[4]int ip[4]之间的差异与int iint *i之间的差异相同。一般来说,对于任何类型T, T tT *t之间的差异都是一样的。也就是说,前者声明了一个T类型的对象,而后者声明了一个指向T类型的对象的指针。

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

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

可以替换为以下序列

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