返回一维数组并将结果写入文本文件的函数

时间:2018-11-11 17:05:55

标签: c arrays function pointers

已要求我编写一个代码,该代码从文本文件中提取2个1D数组,添加它们,然后将结果返回到另一个文本文件。但是,我仍然遇到有关指针的错误。我是C新手,如果有人可以向我解释我会很高兴。

ClassLoader classLoader = Example1.class.getClassLoader();
File file = new File(classLoader.getResource("data/reddit/redditdump.json").getFile());

Object obj = parser.parse(new FileReader(file));

2 个答案:

答案 0 :(得分:0)

我看到的第一个错误是您需要使用返回值的类型声明函数类型,在这种情况下,该函数必须为:

int *dzialanie(int a[], int b[]){
    ...
    return wsk;
}

for循环中出现另一个错误,操作必须为:

...
for (int i=0; i<9; i++){
    *(wsk + i) = a[i] + b[i];
}
...

与另一个相同(请注意,您也没有声明i也是变量)。另一种方法是:

wsk[i] = a[i] - b[i];

是一样的。 如果您已经知道两个数组的维数,则最好将参数用作指针,它将看起来像:

int dzialanie(int *a, int *b){
    ...
}  

您将不得不分配内存,这可以通过malloc完成:

wsk = (int *)malloc(10*sizeof(int));

在程序结束时,您将希望释放分配的内存,方法是:

free(wsk);

希望您能理解,我的英语不好,我来自阿根廷。问候!

答案 1 :(得分:0)

因为您使用的是全局变量,所以返回类型应该为void(和/或某种形式的指示已完成计算。这又可以是简单的返回值-1或w / e(剩下的部分交给您)。

int res[10]; // global variable

void add(int *a, int *b) // no return value, new array will be saved globally(not advisable)
{
    int sign = -1; // your +- check
    printf("0.Suma\n1.Roznica");
    scanf("%c", &sign);
    if (sign == 0)
    {
        for (int i = 0; i < 9; i++)
            res[i] = a[i] + b[i]; 
    }
    else if (sign == 1)
    {
        for (int i = 0; i < 9; i++)
            res[i] = a[i] - b[i]; 
    }
}

另一种替代方法是使用a或b作为“返回”值,并进行简单的更改,例如a[i] += b[i]->现在a具有a + b的值。这样,您就不必处理超出范围等的指针(有关如何从函数中返回指针(以安全的方式)的文档为here)。