我正在学习C编程,这是我的第一门编程课程。我在使用这段代码时遇到了一些麻烦:
int* intArray;
intArray=(int*)malloc(5*sizeof(int));
我相信数组中的元素数是5个整数。但是,我真正理解的是malloc功能。在这种情况下,它是否为5个整数的地址分配了足够的内存?
答案 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);