【发布时间】:2020-04-18 19:09:30
【问题描述】:
你能帮我做这个练习吗?
编写一个 C 程序,从键盘读取 6 个整数,并在数组的前 5 个位置分配前 5 个值;将第六个值存储在变量 N 中。编写一个函数,给定输入用键盘的前 5 个值和整数 N 初始化的数组,返回调整大小以包含 5 + N 个元素的数组,这样每个新的N 个元素对应于数组中它之前的数字的总和。 在 main 中,打印函数返回的数组的内容。
main 函数也可以。
当我必须使用函数 realloc 将数组从 size = 5 增加到 5 + N 时,我遇到了问题。
这是我的代码:
int N, a, i;
int *ptr;
int arr[6];
for (i = 0; i < 5; i++) {
printf("Insert number in array, position(%d): ", i);
scanf("%d", &arr[i]);
}
N = arr[4];
a = 5 + N;
ptr = (int *)realloc(arr, sizeof(int) * a);
for (i = 4; i < a; i++) {
ptr + i = N * N; //<--- **problem!!**
}
for (i = 0; i < a; i++) {
printf("%d\n", ptr[i]);
}
free(ptr);
【问题讨论】:
-
您不能
reallocate 数组的大小。衰减为指针的数组标识符不是从malloc获取的。 -
循环使用
scanf读取前5个数字。然后你需要一个scanf在循环之后读取N。然后还有更多的事情需要解决,但一次只做一件事。我发现读取用户的输入,然后打印出来是很有帮助的,只是为了证明所有的输入都被正确读取了。 -
无法编译指示的
ptr + i = N*N;。你的意思是*(ptr + i) = N*N? -
代替
ptr + i = N * N;,作为WeatherVane 建议[可行] 的替代方案,您可以使用ptr[i] = N * N;,它等效,但更紧凑。
标签: c memory-management sum malloc realloc