在动态内存分配中使用指针
Use of pointers in dynamic memory allocation
有人可以向我解释为什么当我使用 calloc
或 malloc
动态分配内存时,我声明:
int *arr
int n
arr = malloc(n * sizeof(int))
而不是
*arr = malloc(n * sizeof(int))
因为在第一个示例中,您将 arr
设为指向内存的指针。在第二个示例中,您正在使 arr
指向指向已分配内存的指针。
换句话说,您将 arr 声明为指针。 Malloc returns 指向已分配内存的指针。所以你用那个值“填充” arr 。在你的第二个例子中,你用 malloc 返回的值填充 *arr——arr 指向的内容。
arr
是一个 int *
,即“指向 int
的指针”。当您使用 malloc
动态分配内存时,您会得到一个指向该内存的指针,并且应该将其分配给一个变量,在本例中为 arr
.
*arr
(即 arr
的取消引用)只是一个 int
。 *arr
是arr
指向的值,不是指针(地址)本身。
在此代码段中:
int *arr
int n
arr = malloc(n * sizeof(int));
设置了变量(指针)的值arr
与分配内存的地址。
在此声明中:
*arr = malloc(n * sizeof(int));
指针arr
指向的对象int
由分配的内存地址设置。但是,指针 arr
未初始化且未指向有效对象。此外,表达式 *arr
的类型为 int,而右侧表达式的类型为 void *
。所以编译器会报错。
您需要设置指针本身的值,而不是指针对象指向的值。
有人可以向我解释为什么当我使用 calloc
或 malloc
动态分配内存时,我声明:
int *arr
int n
arr = malloc(n * sizeof(int))
而不是
*arr = malloc(n * sizeof(int))
因为在第一个示例中,您将 arr
设为指向内存的指针。在第二个示例中,您正在使 arr
指向指向已分配内存的指针。
换句话说,您将 arr 声明为指针。 Malloc returns 指向已分配内存的指针。所以你用那个值“填充” arr 。在你的第二个例子中,你用 malloc 返回的值填充 *arr——arr 指向的内容。
arr
是一个 int *
,即“指向 int
的指针”。当您使用 malloc
动态分配内存时,您会得到一个指向该内存的指针,并且应该将其分配给一个变量,在本例中为 arr
.
*arr
(即 arr
的取消引用)只是一个 int
。 *arr
是arr
指向的值,不是指针(地址)本身。
在此代码段中:
int *arr
int n
arr = malloc(n * sizeof(int));
设置了变量(指针)的值arr
与分配内存的地址。
在此声明中:
*arr = malloc(n * sizeof(int));
指针arr
指向的对象int
由分配的内存地址设置。但是,指针 arr
未初始化且未指向有效对象。此外,表达式 *arr
的类型为 int,而右侧表达式的类型为 void *
。所以编译器会报错。
您需要设置指针本身的值,而不是指针对象指向的值。