具有malloc函数的数组的大小

时间:2018-01-23 03:41:51

标签: arrays pointers malloc

我正在学习C编程,这是我的第一门编程课程。我在使用这段代码时遇到了一些麻烦:

int* intArray;
intArray=(int*)malloc(5*sizeof(int));

我相信数组中的元素数是5个整数。但是,我真正理解的是malloc功能。在这种情况下,它是否为5个整数的地址分配了足够的内存?

4 个答案:

答案 0 :(得分:0)

不,malloc为5个整数分配足够的内存。它分配传递给函数的内容:5*sizeof(int)。可能令你困惑的是intArray是在堆栈上分配的指针,它指向malloc内存开头的内存地址。

如果你想要5个整数地址的内存,你可以这样做:

int** intArray;
intArray=(int**)malloc(5*sizeof(int*));

答案 1 :(得分:0)

Malloc返回指向已分配空间的void指针,如果没有足够的可用内存,则返回NULL。参数是要分配的大小(以字节为单位)。因此,在行intArray = (int*)malloc(5*sizeof(int));中,您要求为5个整数分配内存足够的sizeof(int)给出int类型的大小)。 (malloc)

使用malloc请求为5个新整数分配足够的内存。

答案 2 :(得分:0)

malloc函数在参数中分配您请求的字节数,并返回块开头的内存中的地址。在这种情况下,您已经请求了一个足够大的内存块来容纳5个整数值。

您将其转换为int *,以便编译器在索引和解除引用时将地址处理为包含整数。

答案 3 :(得分:0)

您观察到的Malloc函数调用需要一个指定字节数的值。来自malloc的文档:

void * malloc(size_t size);

分配内存块。分配大小字节的内存块,返回指针到块的开头

新分配的内存块的内容未初始化,保留不确定的值。

因此,在您的代码段中:

intArray=(int*)malloc(5*sizeof(int));

int size是2个字节。 sizeof(int)返回2.因此,5 * sizeof(int)= 10.因此,代码解析为intArray =(int *)malloc(10);