我正在学习C编程,这是我的第一门编程课程。我在这段代码中遇到了一些问题:
int* intArray;
intArray=(int*)malloc(5*sizeof(int));
我相信数组中的元素数量是 5 个整数。但是,我不太了解的是malloc函数。在这种情况下,它是否为 5 个整数的地址分配了足够的内存?
Malloc 返回指向已分配空间的 void 指针,如果可用内存不足,则返回 NULL。参数是要分配的大小(以字节为单位(。因此,在第intArray = (int*)malloc(5*sizeof(int));
行中,您请求分配足够 5 个整数的内存(sizeof(int)
给出了 int 类型的大小(。(马洛克(
使用 malloc 请求分配足以容纳 5 个新整数的内存。
不,malloc
为 5 个整数分配足够的内存。它分配传递给函数的内容:5*sizeof(int)
。 可能让您感到困惑的是,intArray
是在堆栈上分配的指针,它指向错误分配内存开头的内存地址。
如果你想要 5 个整数的地址的内存,你可以执行以下操作:
int** intArray;
intArray=(int**)malloc(5*sizeof(int*));
<</div>
div class="one_answers"> malloc
函数分配您在参数中请求的字节数,并返回块开头的内存中的地址。 在本例中,您请求了一个足够大的内存块来容纳 5 个整数值。
将其强制转换为int *
以便编译器在索引和取消引用时将地址处理为包含整数。
Malloc 函数调用需要一个指定字节数的值。来自 malloc 的文档:
空*马洛克(size_t大小(;
分配内存块。分配大小字节的内存块,返回指向块开头的指针。
新分配的内存块的内容未初始化,保留不确定的值。
因此,在您的代码片段中:
intArray=(int*)malloc(5*sizeof(int));
int size 为 2 字节。sizeof(int( 返回 2。因此 5 * sizeof(int( = 10。因此,代码解析为 intArray = (int*(malloc(10(;