Ir para o conteúdo
qritiq

Estruturas e Apontadores

Mensagens Recomendadas

qritiq    0
qritiq

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
qritiq    0
qritiq

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;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
magician    2
magician

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 .

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade