使用C函数的第三个数组中第一个和第二个数组的总和

时间:2015-11-21 18:17:05

标签: c arrays

我有这段代码:

#include <stdio.h>
#include <stdlib.h>

int inserimentoarray(int* arrayuno[], int* arraydue[]);
int calcolo(int* arrayuno[5], int* arraydue[5], int* arraytre[5]);

int arrayuno[5], arraydue[5], arraytre[5];

int main (/*int arrayuno[5], int arraydue[5], int arraytre[5]*/)
{
    int cont=0;
    inserimentoarray(arrayuno,arraydue);
    calcolo(arrayuno[5],arraydue[5],arraytre[5]);
    for (cont=0;cont<5;cont++) {
        printf("%d    +    %d     =     %d",arrayuno[cont],arraydue[cont],arraytre[cont]);
    }
    return 0;
}

void inserimentoarray(int* arrayuno[], int* arraydue[])
{
    int cont=0;
    for (cont=0;cont<5;cont++) {
        scanf("%d",&arrayuno[cont]);
        scanf("%d",&arraydue[cont]);
    }
}

void calcolo(int* arrayuno[5], int* arraydue[5], int* arraytre[5])
{
    int cont=0;
    for (cont=0; cont<5; cont++) {
        arraytre[cont]=arrayuno[cont];
    }
}

我该如何使这项工作?这是我第一次在C中使用函数,我不知道如何正确地将数组从函数传递给另一个函数。

2 个答案:

答案 0 :(得分:2)

这是一个快速解决方案

void addArrays(const int s1[], const int s2[], int dest[], int n)
{
    int i;
    for(i = 0; i < n; ++i)         // iterate over the array indices
       dest[i] = s1[i] + s2[i];    // save sum of the two source arrays in destination array
}

s1代表 source1 s2代表 source2 dest代表目标n是数组包含的数组元素的数量。

答案 1 :(得分:1)

主要的见解应该是数组变量的类型等价,并带有指向基类型的指针。

请记住, 在内存分配方面存在差异:声明一个数组变量为其元素分配内存,而指针decalration不会发生这种情况。

声明后,您只传递变量。想象一下,声明会给你一个内存位置的句柄 - 在C中只有程序员有关于什么结构从这个内存位置开始的任何进一步的信息(这是过于简单但应该给你一个开始),这是诅咒(维护!)和恩惠(效率!)同时。关于软件开发的现代观点明确强调设计,重用和可维护性,因此将其视为主要是诅咒......

特别是你没有在函数的形式参数中指定数组边界

保留程序结构以用于教学目的,这将是一个纠正的版本:

#include <stdio.h>
#include <stdlib.h>


void  inserimentoarray( int* au, int* ad );
void  calcolo ( int* au, int* ad, int* at);

int arrayuno[5], arraydue[5], arraytre[5];


int main ()
{
    int cont=0;

    inserimentoarray ( arrayuno, arraydue );
    calcolo ( arrayuno, arraydue, arraytre );
    for (cont=0;cont<5;cont++) {
        printf("%d    +    %d     =     %d; ", arrayuno[cont], arraydue[cont], arraytre[cont]);
    }
    return 0;
}

void  inserimentoarray( int* au, int* ad )
{
    int cont=0;
    for (cont=0; cont<5; cont++) {
        scanf("%d",&(au[cont]));
        scanf("%d",&(ad[cont]));
    }
}

void  calcolo ( int* au, int* ad, int* at)
{
    int cont=0;
    for (cont=0; cont<5; cont++) {
        at[cont] = au[cont] + ad[cont];
    }
}

我准备了a codepad(scanf调用被硬编码分配替换)。