就像这本书向我展示的那样
int *list = malloc(3 * sizeof(int))
但这有什么问题呢?
int *list = malloc(3)
我的理解是 malloc 接受“size”作为参数,而我的目标是只让指针list
接受其中的 3 个值,但是为什么我sizeof(int)
在使用 malloc 时要包含它呢?
小智 7
我们来看这行代码:
int *list = malloc(3 * sizeof(int))
Run Code Online (Sandbox Code Playgroud)
它创建一个指向 an 的指针int
,并为其分配三倍于 int 大小的内存。int
所以我们有足够的空间在该内存块中存储三个。
我假设一个 int 占用四个字节的内存。因此,要存储其中的三个,我们需要 12 个字节的内存(每个 int 四个字节乘以 3 个int
s)。malloc
以字节为单位分配空间,因此将为您提供 12 个字节的内存(sizeof(int)
将返回 4,因为每个 int* 有 4 个字节)。
现在让我们看看另一个版本:
int *list = malloc(3)
Run Code Online (Sandbox Code Playgroud)
您分配三个字节的内存。遗憾的是,1 个 int 是 4 个字节...因此您有足够的空间容纳 3/4 个 int(再次假设 1 个 int 是 4 个字节)。如果你想存储三个 int,无论 int 有多大,你都需要分配三倍的内存,因此3 * sizeof(int)
。
*从技术上讲,有些平台的 anint
不是四个字节。所以最好是写sizeof(int)
而不是4
. 不过,现在不用担心。