任何人都可以解决我的错误

时间:2015-02-16 14:15:20

标签: c arrays pass-by-reference

我似乎无法找到我在C中出错的地方。在第37行,它表示使用数组类型赋值给任何帮助或建议将非常感谢。

我还想知道是否有一些事情要做,不要在括号中添加它们以显示它们在第37行上的数组,但当我将它们放入其中时会显示更多错误

/*
    This program uses pass by reference to calculate the values after two arrays are multiplied by each other

    16/02/2015
    Jake Young
*/

#include <stdio.h>

#define size 5

//Prototype
int multiply_function(int *[], int *[]);

main()
{
    int array1[size];
    int array2[size];
    int i;
    int answer[size];

    //get users input for array1
    printf("Please enter %d values into array1:\n", size);
    for(i=0; i<size; i++)
    {
        scanf("%d", &array1[i]);
    }//end for loop

    //get users input for array2
    printf("Please enter %d values into array2:\n", size);
    for(i=0; i<size; i++)
    {
        scanf("%d", &array2[i]);
    }//end for loop

    //call function()
    answer=multiply_function(&array1, &array2);  //  line 37

    //Print out the results from array1 multiplied by array2
    printf("Array1 multiplied by Array2 is the following:\n");
    for(i=0; i<size; i++)
    {
        printf("%d multiplied by %d is %d\n", array1[i], array2[i], answer[i]);
    }//end for loop
    }//end main()

    multiply_function(int *array1[], int *array2[])
    {
        int *answer[size];
        int i;

        for(i=0; i<size; i++)
        {
            //calculate multiplication
            *answer[i]= *array1[i]* *array2[i];
        }//end for loop

        return(*answer);
    }//end function()

2 个答案:

答案 0 :(得分:1)

  

int multiply_function(int * [],int * []);

这没有任何意义。您打算将整数数组传递给函数,而不是指针数组。您必须研究如何将数组传递给函数。

  

main()的

此表格不标准。除非你正在编写一个&#34;裸机&#34;在嵌入式系统中,您应该使用int main (void)

  

answer = multiply_function(&amp; array1,&amp; array2);

这没有任何意义。您声明函数返回int。再次,研究如何将数组传递给函数和从函数传递数组。此外,您无法使用赋值运算符复制数组:您必须使用memcpy()或类似的函数。

  

multiply_function(int * array1 [],int * array2 [])

函数定义与原型不同:这总是不好的做法。除此之外,如上所述,该功能没有任何意义。

  

int * answer [size];

这没有任何意义,你要声明一个指针数组,你想要一个整数数组。

  

返回(*答案);

在C中返回指向局部变量的指针总是一个bug。你不能像这样返回数组。并且不需要括号。

答案 1 :(得分:1)

好的,你应该花更多的时间来研究C中的数组,指针和函数基础。

除了代码中的语法问题外,此代码中的基本问题是answer []数组。它在main()和multiply_function()中定义。你必须做的是将这个数组传递给multiply_function()并让函数填充数组。

我正在提供以下解决方案,希望您将其与您的版本进行比较并研究差异继续学习C的基础知识:

#include <stdio.h>

#define size 5

//Prototype
int multiply_function(int *, int *, int *);

main()
{
    int array1[size];
    int array2[size];
    int i;
    int answer[size];

    //get users input for array1
    printf("Please enter %d values into array1:\n", size);
    for(i=0; i<size; i++)
    {
        scanf("%d", &array1[i]);
    }//end for loop

    //get users input for array2
    printf("Please enter %d values into array2:\n", size);
    for(i=0; i<size; i++)
    {
        scanf("%d", &array2[i]);
    }//end for loop

    //call function()
    multiply_function(array1, array2, answer);

    //Print out the results from array1 multiplied by array2
    printf("Array1 multiplied by Array2 is the following:\n");
    for(i=0; i<size; i++)
    {
        printf("%d multiplied by %d is %d\n", array1[i], array2[i], answer[i]);
    }//end for loop
    }//end main()

    multiply_function(int *array1, int *array2, int *answer)
    {
        int i;

        for(i=0; i<size; i++)
        {
            //calculate multiplication
            answer[i]= array1[i] * array2[i];
        }//end for loop

        return(*answer);
    }//end function()