我试图动态分配通过函数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;
}
答案 0 :(得分:3)
*(a + i)
无效。您首先要*
解除对a
指针的引用,然后添加+ i
。 a
指向某个变量,a + i
处没有变量。您在(*a) + i
处分配了内存。
您还希望为n
个int
个计数分配内存,而不是为n
的{{1}}个指针分配内存。您需要: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]);
}
}
答案 1 :(得分:2)
我不会使用任何双指针,因为这里不需要100%
int *dynamic_allocation_array(size_t size)
{
int *a = malloc(size * sizeof(*a));
/* another code */
return a;
}
和调用函数中
int *a = dynamic_allocation_array(some_size);