typedef int array[3] 和 typedef int(array)[3] 有什么区别?
What is the difference between typedef int array[3] and typedef int(array)[3]?
我最近遇到了这种定义 int 数组类型的非正统方法:
typedef int(array)[3];
起初我以为它是一个函数指针数组,但后来我意识到 *
和 ()
不见了,所以通过查看代码我推断出类型数组是一个int[3]
改为键入。我通常会将此类型声明为:
typedef int array[3];
除非我误认为它们不是一回事,否则除了使它们看起来类似于函数指针之外,以前一种方式这样做的好处是什么?
What is the difference between typedef int array[3]
and typedef int(array)[3]
?
它们是一样的。
在声明指针时可以使用圆括号,*
会导致不同的类型。在这种情况下,括号可能会影响 []
或 int
的优先级。但是,这不是你的情况。
这两个是等价的。在这种情况下,括号不会改变 []
或 int
的优先级。
工具 cdecl 有助于确认这一点:
int (a)[3]
给出 "declare a as array 3 of int"
int a[3]
给出 "declare a as array 3 of int"
如果你运行这样的代码:
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]<<" ";
它生成的这两种类型的代码都是相同的output.This证明两者是相同的并且括号没有作用。
我最近遇到了这种定义 int 数组类型的非正统方法:
typedef int(array)[3];
起初我以为它是一个函数指针数组,但后来我意识到 *
和 ()
不见了,所以通过查看代码我推断出类型数组是一个int[3]
改为键入。我通常会将此类型声明为:
typedef int array[3];
除非我误认为它们不是一回事,否则除了使它们看起来类似于函数指针之外,以前一种方式这样做的好处是什么?
What is the difference between
typedef int array[3]
andtypedef int(array)[3]
?
它们是一样的。
在声明指针时可以使用圆括号,*
会导致不同的类型。在这种情况下,括号可能会影响 []
或 int
的优先级。但是,这不是你的情况。
这两个是等价的。在这种情况下,括号不会改变 []
或 int
的优先级。
工具 cdecl 有助于确认这一点:
int (a)[3]
给出 "declare a as array 3 of int"int a[3]
给出 "declare a as array 3 of int"
如果你运行这样的代码:
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]<<" ";
它生成的这两种类型的代码都是相同的output.This证明两者是相同的并且括号没有作用。