如何通过引用将创建的指针数组传递到结构中?
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)。但是我无法编译这个程序,它在
中给出了一个错误
line 57 saying that it cannot convert 'float*' to 'float' into the subroutine (forca_res) arguments
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);
那么你就把指针当作数组来对待
for I < 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 */
}
无效。不可能有涉及结构成员访问的函数参数的名称。因此编译器抱怨。
简短的修复是从参数名称中删除 .
字符(在参数列表和函数内)。换句话说,使用有效的变量名。
还有其他问题。
我需要创建一个可以对 N 个向量求和并打印最终数组的程序,例如,如果我输入 N = 2,则第一个数组 (a,b) 和第二个数组 (c,d) 的总和应该是(a+c,d+b)。但是我无法编译这个程序,它在
中给出了一个错误line 57 saying that it cannot convert 'float*' to 'float' into the subroutine (forca_res) arguments
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);
那么你就把指针当作数组来对待
for I < 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 */
}
无效。不可能有涉及结构成员访问的函数参数的名称。因此编译器抱怨。
简短的修复是从参数名称中删除 .
字符(在参数列表和函数内)。换句话说,使用有效的变量名。
还有其他问题。