就像这本书告诉我的那样int *list = malloc(3 * sizeof(int))
但这有什么问题?int *list = malloc(3)
我的理解是malloc接受&;size&;作为一个参数,我的目标是只让指针list
接受其中的3个值,但是为什么我要在使用malloc时包括sizeof(int)
?
让我们看看这行代码:
int *list = malloc(3 * sizeof(int))
它创建了一个指向int
的指针,并为它分配了三倍于int值的内存。所以我们有足够的空间来存储三个int
。
我假设一个int占用四个字节的内存。因此,要存储其中的三个,我们需要12字节的内存(每个int 4字节乘以3个int
s)。malloc
以字节为单位分配空间,因此将为您提供12字节的内存(sizeof(int)
将返回4字节,因为每个int*有4字节)。
现在让我们看看另一个版本:
int *list = malloc(3)
分配三个字节的内存。可悲的是,一个int是四个字节…所以你有足够的空间容纳3/4个int(再次,假设一个int是4个字节)。如果你想存储三个int型,你需要分配的内存等于int型大小的三倍,因此3 * sizeof(int)
。
*从技术上讲,有些平台的int
不是四个字节。所以最好写sizeof(int)
而不是4
。不过现在不用担心这个。
malloc()的参数是您想要分配的字节数。
int* list = malloc(3)
将只分配3个字节
32位平台上的每个整数为32位(4字节)。这可以通过sizeof(int)
获得一个包含3个整数的数组将占用3*sizeof(int)
,在32位平台上是12字节。
int* list = malloc(3*sizeof(int))
将为3个整数分配空间,在32位平台上为12字节