Jump to content

Struct com apontador


Aviron

Recommended Posts

Boas,

estou a tentar criar uma struct, lá dentro contém um vetor onde quero guardar alguns dados já pré definidos, ou seja preferencialmente uma função, que mal o programa inicie é executada e armazena logo esses dados. Para tal tenho de usar apontadores, mas não faço ideia onde os colocar na struct.

Alguém pode ajudar?

Cumps

Link to comment
Share on other sites

a questão está colocada de forma pouco perceptível do que realmente queres.

afinal queres ter na struct um vector ou uma função ?

podes ser mais claro no que realmente queres.

dá exemplos ou pedaços de código de forma que seja mais claro possível

  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Já consegui resolver 🙂

usei uma função para preencher a struct:

int preenche(struct carro v[], int n)
{
strcpy(v[n].marca, "Ford");
   v[n].ano = 2015;
   v[n].km = 1300;
   n++; 
   /* ... */
}

Mas agora estou a obter o erro :error: incompatible types in assignment of 'int' to 'int [10]' na linha v[n].ano = 2015;

Sabes como resolver?

Edited by pwseo
syntax highlight.
Link to comment
Share on other sites

  • 2 weeks later...
#include <stdio.h>
#include <string.h>
struct carro{
char marca[50];
int ano;
float km;
};
int main(){
int preenche(struct carro v[], int n)
{
strcpy(v[n].marca, "Ford");
v[n].ano = 2015;
v[n].km = 1300;
n++;
}
int i;
struct carro m[3];
i = 3;
preenche(&m[0], i);
printf("%s %d %f", m[3].marca, m[3].ano, m[3].km);
return 0;
}

NO caso, quando chamei a função, ao passar o vetor como argumento, eu utilizei o "&"(address operator) juntamente com o vator tipo carro, ou seja:

preenche(&m[0], i);
Edited by Richard597
Link to comment
Share on other sites

nesse exemplo, existem vários problema :

- declaras a função preenche no meio da declaração da função main

- estás a passar para a função preenche o índice de um registo que não se encontra na lista m

- na função printf, estás a pedir os dados do mesmo registo que não existe

ainda existem elementos que são completamente desnecessários

- o incremento do valor de n na função preenche é irrelevante

- a chamada da função não necessita desses redireccionamentos todos, basta : preenche(m, i)

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

nesse exemplo, existem vários problema :

- declaras a função preenche no meio da declaração da função main

- estás a passar para a função preenche o índice de um registo que não se encontra na lista m

- na função printf, estás a pedir os dados do mesmo registo que não existe

ainda existem elementos que são completamente desnecessários

- o incremento do valor de n na função preenche é irrelevante

- a chamada da função não necessita desses redireccionamentos todos, basta : preenche(m, i)

Eu peguei só o começo do exemplo pra continuar e dar uma ideia ao colega que fez a pergunta, segui o começo dele e continuei... O incremento não serve pra nada mesmo.

Agora só não sei explicar o porque que O printf usado ali (com indice 3 em m), dar certo e mostra os valores retornado pela função preenche. Tentei com indice menores que 3 e não deu certo... Será que foi porque eu passei i=3 para função???

Sim! e eu não entendi porque não pode declarar funções dentro de outras funções, isso dará algum problema sério?? Pelo que eu entendo, se eu quero usar uma função somente no escopo de outra, então acho que não tem problema algum declarar uma função dentro da "main()". Ou tem??

Edited by Richard597
Link to comment
Share on other sites

Agora só não sei explicar o porque que O printf usado ali (com indice 3 em m), dar certo e mostra os valores retornado pela função preenche. Tentei com indice menores que 3 e não deu certo... Será que foi porque eu passei i=3 para função???

sim, ao passar 3 como argumento da função estás a "dizer" para gravar num local que não faz parte do array

pode não fazer parte do array mas o valor é gravado na mesma (se não for num local problemático), e é por isso que posteriormente o valor é apresentado no printf

Sim! e eu não entendi porque não pode declarar funções dentro de outras funções, isso dará algum problema sério?? Pelo que eu entendo, se eu quero usar uma função somente no escopo de outra, então acho que não tem problema algum declarar uma função dentro da "main()". Ou tem??

já alguma vez compilaste um código em que tal acontece ?

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.