首页 > 解决方案 > 如何在函数中动态分配数组?

问题描述

我正在尝试动态分配通过函数中的参数传递的数组,但dynamic_allocation_array我不明白为什么它不起作用。

#include <stdio.h>
#include <stdlib.h>
void dynamic_allocation_array(int **a, int n){

    (*a) = (int *)malloc(n * sizeof(int *));
    for(int i = 0; i < n; i++){
        scanf("%d", *(a + i));
    }

}
int main()
{
    int n, *a;
    scanf("%d", &n);
    dynamic_allocation_array(&a, n);
    for(int i = 0; i < n; i++){
        printf("%d ", a[i]);
    }
    return 0;
}

标签: cdynamic-memory-allocation

解决方案


*(a + i)是无效的。您首先要*取消引用a指针,然后添加+ i. 指向某个变量,a没有 at a + i。您在(*a) + i.

您还想为 s 的n计数分配内存int,而不是为n指向int. 你想要:malloc(n * sizeof(int))

使用临时变量,不要*(a + b)只使用a[b]符号,让它更清晰:

void dynamic_allocation_array(int **a, int n) {
    int *tmp = malloc(n * sizeof(int));
    for(int i = 0; i < n; i++){
        scanf("%d", &tmp[i]);
    }

    *a = tmp;
}

或者您可以:

void dynamic_allocation_array(int **a, int n) {
    *a = malloc(n * sizeof(int));
    for(int i = 0; i < n; i++){
        scanf("%d", &(*a)[i]);
    }
}

或者您可以:

void dynamic_allocation_array(int **a, int n) {
    *a = malloc(n * sizeof(int));
    for(int i = 0; i < n; i++){
        scanf("%d", *a + i);
    }
}

推荐阅读