c - 如何在函数中动态分配数组?
问题描述
我正在尝试动态分配通过函数中的参数传递的数组,但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;
}
解决方案
*(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);
}
}
推荐阅读
- curl - 使用 cURL:在 URL 中发现非法字符
- java - 使用java减少饥饿变量超时
- reactjs - React - 如何从孙子调用父函数
- java - 基于数组 contains 和 orderby 查询 firestore
- css - 在 CSS 中,*:link 和 :link 之间有什么区别吗?
- matplotlib - 如何使用串行向我的 PyQt5 窗口添加实时(更新)图?
- .net - 寻找有关 TeamCity 代理要求中某些语法的说明
- wordpress - 如何将用户评论以 PDF 格式附加到订单
- mysql - 记录未插入 - mySql 节点
- laravel - 使用 laravel 保护移动应用程序的公共 api