2012-08-01 69 views
2

有人可以向我解释这些代码部分吗?纠正我,如果我错了。关于malloc的问题

int *longest = malloc(sizeof(int)); 
*longest =0; 

这是否意味着:

  1. 返回一个指针指向一个内存块的大小为(在32位机)4字节的开始?为什么不写malloc(4)
  2. 对于第二行,是否意味着最长是4字节块的指针,从0开始?
+0

这是用于C还是C++?你应该在这个问题中加入一个标签或其他标签,以便清楚表明,并使其显示在搜索等中。另外,如果它是C++,则应该使用'new'。 – KRyan 2012-08-01 18:56:04

回答

6
  1. 是的,这恰好获得足够的内存为一个int。您应该避免明确地假定给定的大小 - 它将成为未来移植到其他平台的噩梦。你自己发现了 - sizeof(int)并不总是4。

  2. 不,这会将值0赋值给longest指向的新分配的内存。这里的*是解引用操作符,它非正式地说“我想用这个指针指向的东西”。

+0

非常感谢。 – zeejan 2012-08-01 19:04:56

+1

有一点补充,对于那个特定的分配情况,甚至有一个更好的成语:int * longest = malloc(sizeof(* longest));''这样可以避免重复类型,所以如果有一天类型改变, everyting仍然一致。 – 2012-08-01 20:16:54