我不明白为什么你要两个都做。 Isnt malloc为您创建动态内存?那么为什么我们必须在开始时声明例如“int”,稍后我将对该变量进行malloc。我是malloc的新手,对不起,如果这个问题有明显的答案。
示例:
主要:
int *p;
然后在函数中:
int *p = malloc(1000 * sizeof(int));
答案 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
。它有一个可以写入值的内存位置。
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
中找到