代码之家  ›  专栏  ›  技术社区  ›  Gabriel Diego

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

  •  20
  • Gabriel Diego  · 技术社区  · 7 年前

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

    typedef int(array)[3];
    

    起初我以为这是一个函数指针数组,但后来我意识到 * () 缺少,因此通过查看代码,我推断类型数组是一个 int[3] 改为键入。我通常会将此类型声明为:

    typedef int array[3];
    

    除非我错了,它们不是同一件事,否则用前一种方式这样做除了让它们看起来像函数指针之外还有什么好处?

    3 回复  |  直到 7 年前
        1
  •  20
  •   gsamaras a Data Head    7 年前

    两者的区别是什么 typedef int array[3] typedef int(array)[3] ?

    他们是一样的。


    * [] int . 然而,这不是你的情况。

        2
  •  7
  •   Candy Gumdrop    7 年前

    这两者是等效的。括号不会改变 [] int

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

    • int (a)[3] 给出“将a声明为int的数组3”
    • int a[3]
        3
  •  -1
  •   Linkon    7 年前

    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]<<" ";