typedef int array [3]和typedef int(array)[3]有什么区别?

Gab*_*ego 20 c++ arrays typedef

我最近遇到了这种非正统的方式来定义一个int数组类型:

typedef int(array)[3];
Run Code Online (Sandbox Code Playgroud)

起初我以为它是一个函数指针数组,但后来我意识到它*()缺失,所以通过查看代码,我推断出类型数组是一个int[3]类型.我通常会将此类型声明为:

typedef int array[3];
Run Code Online (Sandbox Code Playgroud)

除非我误以为它们不是同一个东西,除了使它们看起来类似于函数指针之外,以前的方式这样做有什么好处?

gsa*_*ras 20

typedef int array[3]和之间有什么区别typedef int(array)[3]

他们是一样的.


当声明指针,使用括号时,可以使用括号*,并产生不同的类型.在这种情况下,括号可能会影响[]或的优先级int.但是,这不是你的情况.


Can*_*rop 7

这些都是等价的.括号不会改变[]int在这种情况下的优先级.

工具cdecl有助于确认这一点:

  • int (a)[3] 给出"声明一个int的数组3"
  • int a[3] 给出"声明一个int的数组3"

  • 你的回答对我来说似乎更具说明性,因为包括使用工具cdecl的提示.谢谢! (2认同)
  • @haccks我敢打赌它的失败程度远远低于需要使用它的程序员. (2认同)