gpt4 book ai didi

C - 使用动态数组

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:38 25 4
gpt4 key购买 nike

我在 C 中遇到问题。这是问题:

开发一个 C 函数 ADDER,将两个整数数组相加。 ADDER应该只有两个参数,就是要相加的两个数组。第二个数组参数将在退出时保存数组的总和。两个参数都应通过引用传递。

编写一个 C 程序通过调用 ADDER (A, A) 来测试 ADDER 函数,其中 A 是要添加到自身的数组。数组 A 可以是具有任何值的任何大小。编写、编译和执行程序。

解释程序的结果。


到目前为止,我已经通过这种方式解决了它并且它工作得很好:

#include <stdio.h>

// using namespace std;

const int SIZE = 5;

/* Adds two arrays and saves the result in b
* Assumes that b is larger than or equal to a in size
*/

void ADDER(int (&a)[SIZE], int (&b)[SIZE]) {
int aSize, bSize, i; /* variable declaration */
/* find out the sizes first */
aSize = sizeof (a) / sizeof (int);
bSize = sizeof (b) / sizeof (int);
/* add the values into b now */
for (i = 0; i < aSize; i++) {
b[i] = b[i] + a[i];
}
/* we have the sum at the end in b[] */
}

/* Test program for ADDER */

int main() {
int i; /* variable declaration */
int a[] = {1, 2, 3, 4, 5}; /* the first array */

/* add them now */
ADDER(a, a);
/* print results */
printf("\nThe sum of the two arrays is: ");
for (i = 0; i < SIZE; i++) {
printf("%d ", a[i]); /* print each element */
}
return 0;
}

问题是,我必须使用动态数组并在程序中使用 malloc 和 realloc 来即时计算数组的大小。我不指定数组大小和元素本身,而是希望程序询问用户输入,然后用户输入数组并在那里确定大小。它应该都是动态的。我不知道这是怎么做到的。谁能帮帮我!谢谢!

此外,我还必须解释数组如何与自身相加,结果保存在“a”中,原始数组丢失并被总和取代。我该如何解释?

最佳答案

这是你的程序的样子

int size; //global variable

void ADDER(int *a, int *b) {
int i;
for (i = 0; i < size; i++) {
b[i] += a[i];
}
}

int main(){
//ask the user to input the size and read the size
int *a = (int *)malloc(size*sizeof(int));
int *b = (int *)malloc(size*sizeof(int));

//fill up the elements
Adder(a,b);
//print out b
free(a->array);
free(b->array);
}

尽管使用全局变量并不明智,但这里的底线是加法器不知何故需要知道数组的大小,并且您需要以某种方式将大小传递给 ADDER 函数。如果无法通过参数完成,则必须使用全局变量。

另一种选择是使用结构。

typedef struct myArray{
int *array;
int length;
}ARRAY;

void ADDER(ARRAY *a, ARRAY *b) {
int i;
for (i = 0; i < b->length; i++) {
b->array[i] += a->array[i];
}
}

int main(){
int size; //local variable
//ask the user to input the size and read into the 'size' variable
ARRAY *a, *b;
a->array = (int *)malloc(size*sizeof(int));
b->array = (int *)malloc(size*sizeof(int));
a->length = b->length = size;

//fill up the elements
Adder(a,b);
//print out b.array
free(a->array);
free(b->array);
}

关于C - 使用动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8714113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com