C ++:int * x [5]和int(* x)[5]之间有什么区别?

时间:2016-02-10 01:26:16

标签: c++ pointers

他们俩都是同一个意思吗?它们在C和C ++之间的含义是否不同?

4 个答案:

答案 0 :(得分:6)

您可以使用http://cdecl.org/为自己回答此类问题(粘贴在类型中,它会告诉您英语的含义)。

  

他们俩是否意思相同?

没有

  

C和C ++之间的含义是否不同?

没有

int* a[5]是一个由五个指针组成的数组。

int (*a)[5]是一个指向五个整数数组的指针。

答案 1 :(得分:4)

使用左右规则。

从变量声明开始 - x

现在阅读,直到您遇到顶级,;或不平衡的结束)或声明的结尾。

向左阅读,直至找到匹配的(。从头开始重复。

x) // x
(*x) // is a pointer to
(*x)[5]; // an array of 5 elements
int (*x)[5]; // of integers

x[5]; // x is an array of 5 elements
*x[5]; // of pointers to
int *x[5]; // integers

简单!

答案 2 :(得分:2)

它们不相同:

int * a[5]是一个包含五个元素的数组,每个元素都是一个int指针。

int (*a)[5]是一个指向数组的指针,该数组包含五个int元素。

这个含义在c和c ++中是相同的。

快速,使用http://cdecl.org/(不推荐)

要理解,请阅读How to interpret complex C/C++ declarations(推荐)

答案 3 :(得分:2)

在C和C ++中,2声明含义不会改变。 在C和C ++声明中,' []'优先级高于' *'与变量结合时。因此,在int * x [5]声明中,x与[5]组合,因此它是int *的5元素数组。然而,在int(* x)[5]声明中,x被强制与' *'组合。通过使用'()',所以现在x是指向int [5]的指针。