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

时间:2017-09-26 10:05:32

标签: c++ arrays typedef

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

typedef int(array)[3];

起初我以为它是一个函数指针数组,但后来我意识到*()都丢失了,所以通过查看代码我推断出类型数组是{{ 1}}代替。我通常会将此类型声明为:

int[3]

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

3 个答案:

答案 0 :(得分:20)

  

typedef int array[3]typedef int(array)[3]之间的区别是什么?

他们是一样的。

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

答案 1 :(得分:7)

这些都是等价的。在这种情况下,括号不会改变[]int的优先顺序。

工具cdecl有助于确认:

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

答案 2 :(得分:-1)

如果你运行这样的代码:

typedef int array[6];

array arr={1,2,3,4,5,6};
for(int i=0; i<6; i++)
     cout<<arr[i]<<" ";

现在你运行这样的代码:

typedef int (array)[6];
array arr={1,2,3,4,5,6};
for(int i=0; i<6; i++)
     cout<<arr[i]<<" ";

这两种类型的代码都生成相同的输出。这证明两者都是相同的,括号没有效果。