[英]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.