簡體   English   中英

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

除非我誤以為它們不是同一個東西,除了使它們看起來類似於函數指針之外,以前的方式這樣做有什么好處?

typedef int array[3]typedef int(array)[3]什么區別?

他們是一樣的。


當聲明指針時,可以使用括號,帶* ,並產生不同的類型。 在這種情況下,括號可能會影響[]int的優先級。 但是,這不是你的情況。

這些都是等價的。 在這種情況下,括號不會改變[]int的優先級。

工具cdecl有助於確認這一點:

  • int (a)[3]給出“聲明一個int的數組3”
  • int a[3]給出“聲明一個int的數組3”

如果你運行這樣的代碼:

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

這兩種類型的代碼都生成相同的輸出。這證明兩者都是相同的,括號沒有效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM