Jump to content
JoaoNascimento

Apontadores de estruturas

Recommended Posts

JoaoNascimento

Boa tarde a todos. Já a algum tempo que não programava em estruturas em C. E o meu professor deu-me as seguintes estruturas:

typedef struct livro
{
char autor[50];
char titulo[50];
unsigned char Estado;
}livros;

typedef struct socio
{
char socio[50];
int numero;
[b]livros *requesitado;[/b]
}socios;

A minha principal duvida é a linha em negrito. O que significa?????

que tenho um apontador para um livros certo?????? E como é que por exemplo posso criar uma linha para imprimir isso no ecrã???

Alguém me dá essa luz, a partir dai já fico com uma ideia de como ler de um ficheiro e assim!

Share this post


Link to post
Share on other sites
Localhost

Tens um ponteiro que vai (futuramente) apontar para uma estrutura do tipo livros.

Podes dar a esse ponteiro um endereço de uma estrutura declarada simplesmente ou podes ainda recorrer a alocação dinâmica.

Para imprimires a informação tens de utilizar o operador ->.

Exemplo:

livros pointed_struct;
socios pointer_struct = &pointed_struct;

printf ("%s\n", pointer_struct.requesitado->autor);


here since 2009

Share this post


Link to post
Share on other sites
rolando2424

Para elaborar o que o Localhost disse, tens aqui um exemplo:

#include <stdio.h>
#include <string.h>

typedef struct livro
{
char autor[50];
char titulo[50];
unsigned char Estado;
} livros;

typedef struct socio
{
char socio[50];
int numero;
livros *requesitado;
} socios;

int main(int argc, char *argv[])
{
livros maias;

strcpy(maias.autor, "Eca de Queiroz");
strcpy(maias.titulo, "Os Maias");
maias.Estado = 'B';

socios joao;

strcpy(joao.socio, "Joao");
joao.numero = 1;
joao.requesitado = &maias;

printf("Nome do livro requisitado por %s: %s\n", joao.socio, joao.requesitado->titulo);

// E o mesmo que fazer isto
livros *requesitado_joao = joao.requesitado;
printf("Nome do livro requisitado por %s: %s\n", joao.socio, requesitado_joao->titulo);

return 0;
}

Output:

Nome do livro requisitado por Joao: Os Maias

Nome do livro requisitado por Joao: Os Maias

Portanto as duas formas são equivalentes.

Lembra-te que requesitado_joao->titulo é o mesmo que *(requesitado_joao).titulo


Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente :D

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.