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 i
和int *i
之间的差异相同。一般而言,对于任何类型的T
,它与T t
和T *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]`
后者声明是完全等同于原来的声明所取代。
你有没有尝试过看看自己? – chris 2013-04-07 01:42:15
查找有关C和C++声明的类似问题。 – 2013-04-07 01:42:29
不是,它不是int * ip [4]但是int(* ip)[4] – jiafu 2013-04-07 01:45:52