[英]Use of pointers in dynamic memory allocation
有人可以向我解释为什么当我使用calloc
或malloc
动态分配 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
。 *arr
是arr
指向的值,而不是指针(地址)本身。
在此代码段中:
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.