2013-04-07 116 views
-4

C++中的int (*ip)[4]int ip[4]之间是否有区别?int(* ip)[4]与int ip [4]之间的区别?

+0

你有没有尝试过看看自己? – chris 2013-04-07 01:42:15

+0

查找有关C和C++声明的类似问题。 – 2013-04-07 01:42:29

+0

不是,它不是int * ip [4]但是int(* ip)[4] – jiafu 2013-04-07 01:45:52

回答

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)

0

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]` 

后者声明是完全等同于原来的声明所取代。

相关问题