他们俩都是同一个意思吗?它们在C和C ++之间的含义是否不同?
答案 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]的指针。