簡體   English   中英

如何通過引用傳遞創建到結構的指針數組?

[英]How do I pass by reference an array of pointers created into a struct?

我需要創建一個可以對N個向量求和並打印最終數組的程序,例如,如果我將N = 2,則第一個數組(a,b)和第二個數組(c,d)的總和應為(a + c ,d + b)。 但我無法編譯該程序,它在

第57行表示無法將'float *'轉換為'float'到子例程(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;
}

嗯,自從我編寫C代碼以來已經有一段時間了,但是您的語法甚至不正確(盡管您沒有給出錯誤),您的子例程應該使用

void subroutine(float* stuff, int size);

然后將指針像數組一樣對待

因為我<大小

您也有其他問題,但看起來這可能是該功能的改進版本:

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。也請注意,實際上,如果長度不同的向量可能會出錯如果確實存在這種情況,則應將其作為參數提供。

您詢問的錯誤消息的原因是:

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

}

是無效的。 不能包含涉及結構成員訪問的函數參數的名稱。 因此,編譯器抱怨。

簡短的解決方法是刪除. 參數名稱中的字符(在參數列表中和在函數中)。 換句話說,使用有效的變量名。

還有其他問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM