Jump to content
Aviron

Struct com apontador

Recommended Posts

Aviron

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Aviron

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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

sem a definição dos dados usados é completamente impossível determinar qual o problema

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Richard597
#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

Share this post


Link to post
Share on other sites
Richard597

Nota! no exemplo que coloquei, eu fiz a chamada da função da seguinte forma:

preenche(&m[0], i);

Mas pode ser desta forma também: preenche(m, i);

ou seja, só o nome do vetor serve.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Richard597

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Richard597

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

Sim! a resposta eh sim... Inclusive o exemplo que coloquei aqui foi compilado.

Sim! E obrigado pela explicacao do "printf".

Edited by Richard597

Share this post


Link to post
Share on other sites
HappyHippyHippo

e achas que o código que apresentas necessita de teres uma função local ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
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.