我最近遇到了这种非正统的方式来定义一个int数组类型:
typedef int(array)[3];
起初我以为它是一个函数指针数组,但后来我意识到*
和()
都丢失了,所以通过查看代码我推断出类型数组是{{ 1}}代替。我通常会将此类型声明为:
int[3]
除非我误以为它们不是同一个东西,除了让它们看起来类似于函数指针之外,以前的方式这样做有什么好处呢?
答案 0 :(得分:20)
typedef int array[3]
和typedef int(array)[3]
之间的区别是什么?
他们是一样的。
当使用*
声明指针时,可以使用括号,并产生不同的类型。在这种情况下,括号可能会影响[]
或int
的优先顺序。但是,这不是你的情况。
答案 1 :(得分:7)
答案 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]<<" ";
这两种类型的代码都生成相同的输出。这证明两者都是相同的,括号没有效果。