Duvida com Struct em C

1. Duvida com Struct em C

william jussim
jussim

(usa Ubuntu)

Enviado em 27/10/2018 - 21:28h

Boa tarde pessoal,
Sou iniciante em programação e estou começando a estudar C agora. Estou fazendo algumas atividades para a faculdade e estou com uma duvida no desenvolvimento do meu codigo.
Tenho uma struct Cliente que contém entre diversos campos um vetor de ponteiros para uma struct Projeto.
Tenho também uma struct CliEx que possui uma variavel do tipo Cliente (Vamos chama-la de C1) e um ponteiro pra uma variavel do tipo CliEx.
Da mesma forma tenho uma struct chamada ProEx que possui uma variavel do tipo Projeto (Vamos chama-la de P1) e um ponteiro para uma variavel do tipo ProEx.
A minha dúvida é a seguinte. Como eu posso acessar o endereço de memoria da variavel P1 que esta dentro da struct ProEx para poder armzena-la dentro do meu vetor de ponteiros para projeto de C1?

É possivel que eu armazene em uma variavel do tipo ponteiro o endereço de um elemento especifico dentro de uma struct?

Caso alguém posso me explicar como funcionaria esse processo ou ter algum material que me ajude eu agradeço.


  


2. Re: Duvida com Struct em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/10/2018 - 05:29h

Você pode obter o endereço de qualquer variável através do operador unário &. Se você tiver uma variável var de um tipo de dados T, a expressão “&var” vai produzir um valor do tipo T * (ponteiro para T) com o endereço onde var está armazenada.

Note, porém, que um ponteiro para uma variável só faz sentido enquanto essa variável estiver dentro do seu escopo. Por exemplo, se sua variável for local e com alocação automática dentro de uma função ou de um bloco, você não deve usar seu endereço para tentar chegar ao dado que ela armazena depois que o fluxo de execução sair dessa função ou bloco.

int *f(int *arg){
int a = *arg * 5;
return &a; // PROBLEMA: Estou retornando o endereço de uma variável local de alocação
// automática, que deixa de existir assim que a função termina.
}

int main(void){
int x = 5;
/*
Abaixo eu uso “&x”, sendo x também uma variável local de alocação automática, mas
esse uso é OK porque o fluxo de execução só sai do escopo em que x é válida quando
terminar a função main().

O valor atribuído a y também não é um problema em si, pois é um valor de endereço
como outro qualquer. Só que ele será um problema quando eu tentar usá-lo para
chegar ao dado original, porque o dado para onde ele aponta já não será mais válido.
*/
int *y = *f(&x);

/*
A impressão abaixo é imprevisível. Pode ser que imprima 25 (se, apesar de o dado não
mais ser válido, nada ainda tiver sobrescrito a memória onde ele residia), pode ser que
imprima lixo, pode ser que faça capotar o programa, pode ser que trave o computador...
*/
printf("x=%d; *y=%d\n", x, *y);
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts