繁体   English   中英

在动态 memory 分配中使用指针

[英]Use of pointers in dynamic memory allocation

有人可以向我解释为什么当我使用callocmalloc动态分配 memory 时,我声明:

int *arr
int n
arr = malloc(n * sizeof(int))

并不是

*arr = malloc(n * sizeof(int))

因为在第一个示例中,您将arr设为指向 memory 的指针。在第二个示例中,您将arr设为指向分配的 memory 的指针。

换句话说,您将 arr 声明为指针。 Malloc 返回指向已分配的 memory 的指针。因此您用该值“填充”arr。 在您的第二个示例中,您正在使用 malloc 返回的值填充 *arr——arr 指向的内容。

arr是一个int * ,即“指向int的指针”。 当您使用malloc动态分配 memory 时,您会得到一个指向该 memory 的指针,并且应该将其分配给一个变量,在本例中为arr

*arr (即arr的取消引用)只是一个int *arrarr指向的值,而不是指针(地址)本身。

在此代码段中:

int *arr
int n
arr = malloc(n * sizeof(int));

变量(指针) arr的值设置为分配的地址 memory。

在这个声明中:

*arr = malloc(n * sizeof(int));

具有类型int的指针arr指向的 object 由分配的 memory 的地址设置。但是指针arr未初始化并且未指向有效的 object。此外,表达式*arr具有类型 int 而权利手边表达式的类型为void * 所以编译器会报错。

您需要设置指针本身的值,而不是指针 object 所指向的值。

暂无
暂无

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

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