回答
好吧,有很多不同之處。
此分配在堆上一個int
的緩衝器...
int *x;
x = (int*)malloc(sizeof(int));
而這種分配無論是在疊或全局存儲器四個int
秒的陣列,或者聲明爲成員結構或類,如果它出現一個結構或類的定義中......
int x[4];
除了分配的位置,一個int
第一分配的空間和分配的第二空間爲四個int
s。但假設你的意思是要做到這一點,而不是...
int *x;
x = (int*)malloc(sizeof(int) * 4);
...那麼在這種情況下,無論是分配的內存,你的平臺上的int
的四倍塊。從使用的角度來看,您可以以幾乎相同的方式使用它們; x[0]
在任何一種情況下都是第一個int
,既然它們都沒有被宣佈爲const
,您可以用相同的方式讀取或寫入。
所以現在我們得到的分配特性的差異&的分配內存的兩種不同的方式壽命:
在malloc()
「版的情況下,內存,以便請求在堆上分配,而其一輩子不管你想保留多久,直到你撥打free()
就可以了。在另一種情況下,如果您將其聲明爲方法/函數內的局部變量,則其生命週期將一直存在,直到程序執行退出其聲明的範圍。如果您將其聲明爲全局變量,則其生命週期是整個應用程序的生命週期。如果你將它聲明爲結構體或類的成員變量,那麼它的生命週期就是它的封閉結構體/類,無論它是什麼。
int *xp;
與int xa[4];
之間最重要的差異是sizeof(xp) != sizeof(xa)
聲明對象的大小。
您可以將xa
對象int *pparam
傳遞給一個函數,但你不能傳遞xp
爲int aparam[4]
的功能,如aparam描述了整個4 int對象和pparam描述了一個指向的對象可能具有任何長度。
另外xa
將被保留在鏈接的程序的數據區中,而指針malloc(sizeof(int)*4)
將在運行時和堆上由系統調用分配。在調試器中檢查巨大的地址差異!
啊..是的.. sizeof()。我忘記了這一點。當然'sizeof(xp [0])== sizeof(xa [0])''。你也讓我把它們作爲參數傳遞給一個函數。給予好評。 – phonetagger
- 1. malloc和tc_malloc有什麼區別?
- 2. calloc和malloc跟memset有什麼區別?
- 3. malloc()和realloc()有什麼區別?
- 4. IEnumerable和數組有什麼區別?
- 5. int和char數組有什麼區別?
- 6. 數組和ArrayList有什麼區別?
- 7. 字典和數組有什麼區別?
- 8. 數組和散列有什麼區別?
- 9. c,數組和malloc的區別。錯誤
- 10. Malloc和新運算符分配內存有什麼區別?
- 11. CPU和芯片組有什麼區別?
- 12. 元組和compress_pair有什麼區別?
- 13. 組件和指令有什麼區別?
- 14. 組件和涼亭有什麼區別?
- 15. NumPy數組和簡單Python數組有什麼區別?
- 16. Smalltalk中的數組和字面數組有什麼區別?
- 17. 數組地址和數組本身有什麼區別嗎?
- 18. 原始數組和引用數組之間有什麼區別?
- 19. 嵌套數組和關聯數組有什麼區別?
- 20. 這兩個數組有什麼區別?
- 21. 數組與對象有什麼區別?
- 22. 有什麼區別`和$(Bash中有什麼區別?
- 23. 用malloc分配數組類型和數組之間的區別
- 24. 有什麼區別? :和||
- 25. &&和||有什麼區別?
- 26. 「/」和「/ *」有什麼區別?
- 27. 有什麼區別:。!和:r!?
- 28. ==和===有什麼區別?
- 29. Appender和〜有什麼區別?
- 30. $ @和$ *有什麼區別?
[聲明和malloc之間的區別]可能的重複(http://stackoverflow.com/questions/10575544/difference-between-declaration-and-malloc) – Paulpro