簡體   English   中英

array [n]和array []之間的區別?

[英]Difference between array[n] and array[]?

例如,之間有什么區別嗎?

int array[]={1, 2, 3, 4, 5};

和,

int array[5]={1, 2, 3, 4, 5};

對於第一種情況,編譯器需要自己計算元素的數量,這可能需要一些時間( {...}的1234332534個元素),所以第二種情況比第一種情況有效?

這個數組聲明:

int array[] = {1, 2, 3, 4, 5};

與以下內容完全相同:

int array[5] = {1, 2, 3, 4, 5}; 

元素的數量是在編譯時計算的,因此沒有與之關聯的運行時成本。

第一個聲明的優點是它不需要程序員手動計算元素的數量,因此在這個意義上它是一個更有效的數組聲明。

只要[]之間的顯式元素計數與{}之間的初始值設定項數相同,就沒有區別。

關於“效率”的問題沒有實際意義。 數組大小在編譯時確定,這意味着它對代碼的效率沒有影響。 並且因為無論如何編譯器都必須解析初始化列表,它對編譯的效率沒有實際影響。

  1. 最終結果沒有區別; 仍然,第一種形式更容易編寫和維護,因為您不必手動計算元素。
  2. 編譯器可能必須對元素進行計數:它必須檢測它們是否更多,因為它是編譯錯誤,如果它們更少,則其他元素必須初始化為零。
  3. 無論如何,這樣的計數是在編譯時完成的,因此對生成的可執行文件的性能沒有影響。
  4. 一般來說,你永遠不會在堆棧上創建非常大的數組或者作為全局數據(因為通常大堆棧分配失敗,而大數組作為全局變量將導致巨大的可執行文件 )。
  5. 即使您設法使編譯器接受1234332534元素的靜態/本地數組,元素的計數也可能是此編譯的最后一個性能問題。

†。 另一方面,大型全局陣列是二進制資源經常被包含在固件中以便閃存到嵌入式設備上的方式。 但我不認為任何人都會認為這種蠻力方法適用於大於幾MB的任何東西。

沒有區別,除了你,程序員,不必確定數組中有多少元素。 編譯器仍然會計算元素以分配適當的數量,因此兩者都需要編譯器使用相同的時間來編譯。

在第二種情況下,如果給出錯誤的值來初始化存儲器,則預編譯器將捕獲錯誤。 這就是它。

暫無
暫無

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

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