我已经写了主体加一个功能merge()
是合并两个数组arr1[]
和arr2[]
并将其存储在第三阵列,*arr3[]
代码使用的内存分配给存储值的数组。如何使用指针
我仍然对指针和内存分配感到困惑。我应该在代码中放置什么样的命令来告诉它将两个合并的数组放入第三个数组中,*arr3[]
?
我试着写*arr3 = (double *) malloc (*sz3)
但我收到一个错误“ld返回1退出状态”。
下面是代码:
/* This is a function that will merge contents of arr1 and arr2 and store in arr3 as a
pointer */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void merge(double arr1[], double arr2[], double *arr3[], int sz1, int sz2, int *sz3);
void print_arr(double arr[], int sz);
int main(){
double v0[] = {};
double v1[] = {22.0, 30.1, 35.2, 49.2, 56.4, 65.1, 76.4, 79.6, 86.2, 88.9};
double v2[] = {4.6, 9.0, 13.0, 47.8, 66.9, 68.7, 71.0};
double v3[] = {80.1, 92.7, 97.4, 102.3, 105.0, 112.3, 121, 136.7, 163.4, 177.9};
int sz1 = 10, sz2 = 7, sz3 = 10, szres;
double *res;
printf("\nTEST 1\n======\n");
merge(v1, v2, &res, sz1, sz2, &szres);
print_arr(res,szres);
free(res);
printf("\nTEST 2\n======\n");
merge(v0, v3, &res, 0, sz3, &szres);
print_arr(res,szres);
free(res);
printf("\nTEST 3\n======\n");
merge(v2, v3, &res, sz2, sz3, &szres);
print_arr(res,szres);
free(res);
return 0;
}
/* function to print the array */
void print_arr(double arr[], int sz){
for(int i = 0; i < sz; i++){
printf("%7.2lf",arr[i]);
}
printf("\n");
}
void merge(double arr1[], double arr2[], double *arr3[], int sz1, int sz2, int *sz3) {
int i, j, k;
j = k = 0;
for (i = 0; i < (sz1+sz2);) {
if(j < sz1 && k < sz2) {
if (arr1[j] < arr2[k]) {
*arr3[i] = arr1[j];
j++;
} else {
*arr3[i] = arr2[k];
k++;
}
i++;
} else if (j == sz1) {
for (; i < (sz1 + sz2);) {
*arr3[i] = arr2[k];
k++;
i++;
}
} else {
for (; i < (sz1+sz2);) {
*arr3[i] = arr1[j];
j++;
i++;
}
}
}
}
LD是你的连接。这意味着你可能试图使用一个不存在的符号。链接器告诉你问题是什么,但是你没有在这里包含完整的错误信息。 –
谢谢。我修正了它,但是,我仍然无法将合并的数组存储在arr3 []中。 –
请将你的'malloc'语句添加到代码中。 – Holsety