1
A
回答
3
如果您不需要其創建範圍外的對象,則可以在堆棧上使用對象。
實施例:
int foo(int in)
{
int i = in + 2;
return i;
}
i
不需要外部foo
。因此,你在棧上創建一個對象並返回它的值。
如果您需要超出創建範圍的對象,則可以使用堆上的對象。
int* foo(int in)
{
int* ip = new int(in + 2);
return ip;
}
,爲了從foo
返回ip
點,預計通過調用函數中使用的指針。因此,您需要在堆上創建一個對象並將其返回。
這是差異的概念方面。通常,如果您正在討論int
,則不需要使用堆中的對象。當你需要返回一個數組時,差異就變得很重要。
int* foo()
{
int arr[] = {1, 2, 3, 4};
return arr;
}
該函數將是一個問題,因爲它返回一個函數返回後無效的指針。
int* foo()
{
int* arr = new int[4]{1, 2, 3, 4};
return arr;
}
這將工作,因爲返回的指針即使在函數返回後也會指向有效的對象。調用函數必須負責釋放內存。
+0
謝謝,我現在明白了。 – Crally
-1
相關問題
- 1. 爲什麼和什麼時候值得使用指針指針?
- 2. 什麼是指針聲明?
- 3. Golang:什麼時候使用指針
- 4. 什麼時候將const_iterator聲明爲一個常量迭代器?
- 5. 什麼是有兩種指針聲明
- 6. 函數指針聲明 - __P做什麼?
- 7. 我什麼時候需要聲明session_start();?
- 8. 聲明const指針爲int?
- 9. 什麼時候是一個指針慣用?
- 10. 爲什麼在void/int聲明後const?
- 11. JUnit:我什麼時候聲明一個TemporaryFolder對象?
- 12. 什麼時候聲明一個類的屬性?
- 13. IOS sythesize - 什麼時候聲明一個內部變量?
- 14. 爲什麼使用聲明沒有公開成員指針
- 15. 爲什麼聲明指針使其內容爲零?
- 16. 'C'爲什麼我將變量聲明爲'指針'?
- 17. 爲什麼隊列和堆棧被聲明爲指針?
- 18. 爲什麼p2不是聲明中的指針類型int * p1,p2;?
- 19. 從什麼時候Xcode不再需要轉發方法聲明,爲什麼?
- 20. 爲什麼我的int是一個指針?
- 21. 爲什麼cudaMalloc()使用指針指針?
- 22. 爲什麼一個int的地址能夠被當作指向int的指針?
- 23. 爲什麼使用指針
- 24. 爲什麼字符串聲明或定義使用字符指針
- 25. 我必須爲NULL指針的malloc?我什麼時候需要爲malloc指針?
- 26. 爲什麼或什麼時候應用需要服務器?
- 27. 什麼時候或爲什麼使用MySQL AS和USING?
- 28. 爲什麼指向指針?
- 29. 什麼時候使用指針,何時不使用它們
- 30. 在其聲明中帶有指針的函數。爲什麼?
應該用指針聲明什麼,爲什麼? – lisyarus
你使用它們的方式會有所不同;指針必須由'* ptr'使用。 – Bernard
一個在棧上,後者在堆上。您必須刪除堆上的內容才能泄漏內存。 – Rishi