【问题标题】:Use of pointers in dynamic memory allocation在动态内存分配中使用指针
【发布时间】:2020-12-11 14:18:35
【问题描述】:

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

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

而不是

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

【问题讨论】:

    标签: c pointers malloc dynamic-memory-allocation


    【解决方案1】:

    因为在第一个示例中,您将arr 设为指向内存的指针。在第二个示例中,您正在使 arr 指向指向已分配内存的指针。

    换句话说,您将 arr 声明为指针。 Malloc 返回一个指向已分配内存的指针。所以你用那个值“填充” arr 。在您的第二个示例中,您将使用 malloc 返回的值填充 *arr(arr 指向的内容)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        在这段代码中sn-p:

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

        用分配的内存地址设置变量(指针)arr的值。

        在此声明中:

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

        类型为int 的指针arr 指向的对象由分配的内存地址设置。然而,指针arr 没有被初始化并且没有指向一个有效的对象。此外,表达式*arr 的类型为int,而右侧表达式的类型为void *。所以编译器会报错。

        你需要设置指针本身的值,而不是指针对象所指向的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-12
          • 2015-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-10
          • 1970-01-01
          相关资源
          最近更新 更多