回答
好吧,有很多不同之处。
此分配在堆上一个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