如何通过引用传递创建到结构中的指针数组?

时间:2015-05-15 21:18:51

标签: c arrays struct subroutine

我需要创建一个可以对N个向量求和并打印最终数组的程序,例如,如果我将N = 2,第一个数组(a,b)和第二个数组(c,d)的总和应该是( a + c,d + b)。但是我无法编译这个程序,它在

中出错了
  第57行说它无法转换浮动*'到'漂浮'进入子程序(forca_res)参数

PS:报价是葡萄牙语,我很抱歉,但这是我的母语。

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

//ESTRUTUTRA
struct vetores
{
    int dim=2;
    float *vet;
}vetor_forca,vetor_res; //Lista de Objetos


//SUBROTINA
void forca_res(float vetor_forca.vet[2], float vetor_res.vet[2])
{   
    int i;
    //Calculo do Vetor Resultante
    for(i=0;i<2;i++)
    {
        vetor_res.vet[i] = vetor_res.vet[i] + vetor_forca.vet[i];
    }
}


//PROGRAMA PRINCIPAL
int main(void)
{
    //Declaracao de variaveis
    int num, i, cont=0;
    vetores vetor_forca, vetor_res;
    vetor_forca.vet= (float*) calloc( vetor_forca.dim, sizeof(int) );
    vetor_res.vet= (float*) calloc( vetor_res.dim, sizeof(int) );

    //Leitura de dados
    printf("Digite a quantidade 'N' de vetores de forca: ");
    scanf("%d", &num);

    //Logica
    while (cont != num)
    {
        printf("\nDigite os dois elementos do vetor de forca:\n");
        for(i=0;i<2;i++)
        {
            scanf("%f", &vetor_forca.vet[i]);
        }
        //Chamando a Subrotina
        forca_res(vetor_forca.vet, vetor_res.vet);
        vetor_forca.vet= (float*) calloc( vetor_forca.dim, sizeof(int) );
        cont++;
    }
    free(vetor_forca.vet);

    //Imprimindo o Resultado
    printf("\n\nVETOR RESULTANTE:\n");
    for(i=0;i<2;i++)
    {
        printf("%f ", vetor_res.vet[i]);
    }

    //Finalizando o Programa
    printf("\n\nFim do Programa!\n");
    getch();
    return 0;
}

3 个答案:

答案 0 :(得分:1)

嗯, 我编写C代码已经有一段时间但你的语法甚至不正确(尽管你没有给出错误) 您的子程序应该采用

void subroutine(float* stuff, int size);

然后你将指针视为一个数组

  

对于我&lt;大小

答案 1 :(得分:1)

您还有其他问题,但看起来这可能是您功能的改进版本:

void forca_res(struct vetora *forca, struct vetora *res)
{
    // Set dim to be the lesser of forca->dim and res->dim
    int dim = ((forca->dim <= res->dim) ? forca->dim : res->dim);
    int i;
    //Calculo do Vetor Resultante
    for(i=0;i<dim;i++)
    {
        res->vet[i] += forca->vet[i];
    }
}

main()中,您可以这样称呼它:

forca_res(&vetor_forca, &vetor_res);

除其他外,请注意,此版本的函数依赖于struct vetora对象来提供其数组的维度,而不是假设维度2.另请注意,实际上,您可能希望出错如果提供不同长度的向量作为参数,如果确实这是不应该出现的情况。

答案 2 :(得分:1)

您询问的错误消息的原因是

的规范
void forca_res(float vetor_forca.vet[2], float vetor_res.vet[2])
{
    /* whatever */

}

无效。不可能有涉及struct成员访问的函数参数的名称。因此编译器投诉。

简短的解决方法是从参数名称中删除.个字符(在参数列表中和函数内)。换句话说,使用有效的变量名称。

还有其他问题。