• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

qritiq

Estruturas e Apontadores

7 mensagens neste tópico

Comecei há pouco tempo a programar em C, e surgiram-me umas duvidas no que respeita a trabalhar com Structs e Apontadores. Por exemplo:

#include <stdio.h>
typedef struct celula {
        int x,y;} CELL;
        
void funcao(CELL *c,int x)
{
    c.x=2*x+1;
    c.y=x+4;
}

int main()
{
    CELL c;
    funcao(&c,4);
    printf("\n\t%d\t%d\n",c.x,c.y);
    return 0;
}

Ao tentar correr o programa, surgem-me os seguintes erros:

request for member 'x' in something not a structure or union

request for member 'y' in something not a structure or union

Alguém me pode explicar como resolver isto? tnks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vim só corrigir 1 gralha:

void funcao(CELL *c,int x)
{
    *c.x=2*x+1;
    *c.y=x+4;
}

e dizer que ja encontrei a solução. É bastante estúpido, de qualquer maneira aqui fica:

#include <stdio.h>
typedef struct celula {
        int x,y;} CELL;
        
void funcao(CELL *c,int x)
{
    (*c).x=2*x+1;
    (*c).y=x+4;
}

int main()
{
    CELL c;
    funcao(&c,4);
    printf("\n\t%d\t%d\n",c.x,c.y);
    return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para acederes aos campos da struct nao precisas do * basta o nome da struct, mas se não me engano tens de usar -> ao invés do .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para acederes aos campos da struct nao precisas do * basta o nome da struct, mas se não me engano tens de usar -> ao invés do .

Só para confirmar o que foi dito pelo magician. Podes utilizar

    c->x=2*x+1;
    c->y=x+4;

em vez de

    (*c).x=2*x+1;
    (*c).y=x+4;

Estava na dúvida se este operador existia em C ou se era exclusivo de C++, mas pelo que vi existe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu por acaso nunca uso o . recorro sempre há -> para não me confundir com o . do Java :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok, obrigado a todos, não conhecia o -> mas vou passar a usar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora