C - 声明变量并调用malloc

时间:2014-08-08 14:32:23

标签: c malloc

我不明白为什么你要两个都做。 Isnt malloc为您创建动态内存?那么为什么我们必须在开始时声明例如“int”,稍后我将对该变量进行malloc。我是malloc的新手,对不起,如果这个问题有明显的答案。

示例:

主要:

int *p;

然后在函数中:

int *p = malloc(1000 * sizeof(int));

4 个答案:

答案 0 :(得分:3)

  

Isnt malloc为您创建动态内存吗?

确实如此。但是,您需要能够在某处保存该内存的地址。

int *ptr = malloc(1000 * sizeof(int));
...
free(ptr); // Once you are done, you need to release the memory by calling free

地址存储在指针ptr中,需要存储少量内存。您可以使用该指针来引用已分配的内存。

答案 1 :(得分:1)

以下两个定义之间存在很大差异:

int i;
int *pI;

i int。它有一个可以写入值的内存位置。

但是,{p> pI不是int。它是指向int的指针。它的价值是一个地址。在将其指向足以容纳int的有效内存位置之前,您无法将值写入其指向的内存位置。例如:

pI = &i;
*pI = 10;

您可以使用关键字void创建通用指针,但不能取消引用void指针。编译器需要知道日期类型才能取消引用指针。

int i;
void *pV;

pV = &i;
*(int *)pV = 10;

答案 2 :(得分:0)

如果在main中声明int * p并且在函数中再次声明你有两个具有不同作用域的指针,则函数中的p仅在输入函数时在范围内,并且在函数返回时变为无关,除非函数返回函数的地址为p到main。

答案 3 :(得分:-1)

在int的特定情况下,您可能不希望动态创建内存空间。当您不知道内存使用情况的最坏情况时,您只想这样做。

如果要创建一个int指针,那将完全不同。更多信息可以在this post

中找到