以下代碼行是否相同? Student *s = new Student[n];
and Student s[n];
如果不是,那麼在C++編程語言中new和delete的功能是什麼?目標C++編程中的對象數組
回答
Student *s = new Student[n]
位於heap
內存中,在運行時進行評估。你必須delete [] s
手動刪除它,並s
內容可能範圍
Student s[n]
分配staticly
,位於stack
內存外使用,它並沒有真正的工作,你只能使用特定的編譯時間恆定,以取代n
建議將堆和堆棧交換爲動態和自動。有時候,這種額外的抽象層面會造成所有差異。 – user4581301
在此聲明
Student *s = new Student[n];
有聲明的類型的Student *
的指針。其大小通常等於4
或8
字節,具體取決於所使用的系統。
您可以檢查它的大小通過以下方式
std::cout << sizeof(s) << std::endl;
該指針明確的動態分配的數組new Student[n]
的第一個元素的地址初始化。這裏n
可以是一個運行時計算表達式。
要知道動態創建的數組中有多少元素,您應該將表達式n
中的值保存在某個變量中。
在此聲明
Student s[n];
有聲明的類型Student[n]
的陣列或更精確的對象。 對象的大小等於n * sizeof(Student)
。您可以檢查它的大小通過以下方式,因爲它已經在上面顯示
std::cout << sizeof(s) << std::endl;
數組不明確的初始化。所以如果它有自動存儲時間,那麼它的元素具有不確定的值。表達式n
應該是在編譯時評估的常量表達式。
可以確定的使用例如表達所述陣列的元件的數量sizeof(s)/sizeof(*s)
要考慮到除了極少數例外,例如用於我當在表達式中使用的sizeof
操作者陣列指示符轉換爲指針其第一要素。
- 1. 目標中面向對象編程中的對象c
- 2. 添加和訪問數組中的對象(目標c)
- 3. 對象的數組轉換成目標
- 4. 打印[對象對象],[目標對象],以JSON數組
- 5. 目標C - 傳遞對象的數組表視圖
- 6. NSConcreteData泄漏目標c中的對象?
- 7. 交換目標中的對象c
- 8. 目標C中的零對象引用
- 9. 發佈目標中的對象C
- 10. 目標C [對象發行]
- 11. 對象鑄造目標-c
- 12. 目標C:對象名稱
- 13. 目標C填充對象
- 14. 目標C中的通用數組C
- 15. C#編程使用對象,數據字段和數組
- 16. C#數組語法面向對象的編程
- 17. NSMutable數組 - 「不是目標-C對象」錯誤
- 18. 對象數組C++
- 19. C++對象數組
- 20. 對象數組,C++
- 21. 對象數組C++
- 22. 使用目標c以編程方式初始化故事板中的對象
- 23. C++中的面向對象編程
- 24. Objective-C中編程對象的創建
- 25. 在表格視圖中替換和編輯對象。 (目標C)
- 26. 數組可以是頂級JSON對象嗎? (在目標C中,Stig Brautaset的庫)
- 27. 訪問數組中的對象項目
- 28. 作爲目標C中的數據成員的對象目標C中的數據成員
- 29. 目標C中C#中的對象的等價物是什麼?
- 30. 在C++中對對象數組排序
歡迎來到Stack Overflow!聽起來像你可以使用[良好的C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – NathanOliver
也許dupe:https://stackoverflow.com/問題/ 6122091/whats-the-difference-pointer-to-an-array-vs-regular-array – NathanOliver
***以下代碼行是否相同?***編號'Student s [n]'是非法的在C++中,除非'n'是編譯時間常量。一些C++編譯器有一個非標準擴展,當'n'不是編譯時間常量時,它允許編譯它。 – drescherjm