繁体   English   中英

C-声明变量并调用malloc

[英]C - Declaring variables and calling malloc

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

例:

在主要方面:

int *p;

然后在函数后面:

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

malloc不是为您创建动态内存吗?

是的 但是,您还需要能够将该内存的地址保存在某处。

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

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

以下两个定义之间有很大的区别:

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;

如果在main函数中又在函数中再次声明int * p,那么您将获得两个具有不同作用域的指针,则in函数中的p仅在输入函数时才在作用域中,而在函数返回时将不相关,除非您的函数返回函数的地址。函数的p到main。

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

如果您要创建一个int指针,那将是完全不同的故事。 更多信息可以在这篇文章中找到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM