Ir ao conteúdo
  • Cadastre-se
Igor Vargas

C Como passar um valor para um vetor de estrutura

Posts recomendados

Olá. Estou com um problema onde nao estou conseguindo mostrar aquele resultado da idade. Na verdade é um código teste pois não sei como passar um valor dessa forma.

 

struct pessoa{

	int idade[2];
};

struct carro{
	int carro[2];
};







main(){
	struct pessoa pessoas[2], *p;
	struct carro Carro[2], *c;

	
		int i=0;
		(p + i)->idade[i] = 1;
		printf("%d",(p+i)->idade[i]);
		
	
	
	
	
	
}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ali depois de int i=0; coloque essa linha abaixo:
p = pessoas;

é que o ponteiro p não tá apontando pra um endereço válido. Nessa linha acima, ele vai apontar pro endereço do vetor 'pessoas'.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 17/08/2019 às 12:51, Igor Vargas disse:

não sei como passar um valor dessa forma

 

Olá

 

Talvez sua dúvida seja como acessar as variáveis dentro das estruturas. Veja esse código, que usa seu exemplo, e talvez ajude a entender. Pessoa está declarada assim:

struct Pessoa
{
    int idade[2];
};

struct Pessoa	pessoas[2];

E você pode preencher assim:

    // sao duas Pessoa, em cada pessoa duas idades
    pessoas[0].idade[0] = 0;
    pessoas[0].idade[1] = 1;
    pessoas[1].idade[0] = 2;
    pessoas[1].idade[1] = 3;

Claro, para a estrutura Carro é igualzinho e não vou repetir para que você não se canse ;) 

Note que para entender ajuda se você usar valores distintos e conhecidos para cada idade em cada pessoa, como fiz aqui usando 0,1,2 e 3. Imagino que por isso você tenha declarado int idade[2];

E os ponteiros são declarados assim:

struct Pessoa* p;

Então se escrever 

    p = pessoas;

p vai apontar para a primeira das pessoas[], pessoas[0], e ao escrever

p = p + 1;

p passa a apontar para a segunda. E por isso a aritmética de ponteiros é tão útil em C.

E se você escrever p = p + 1 de novo tudo bem. Mas como não tem pessoas[2] se você tentar acessar *p de novo seu programa irá para o espaço, e por isso essas coisas dão tanto erro :D 

 

Esse programa

#include "stdio.h"

struct Pessoa
{
    int idade[2];
};
struct Pessoa    pessoas[2];
struct Pessoa* p;

struct Carro {
    int carro[2];
};
struct Carro    carros[2];
struct Carro* c;

int main( 
    int argc,
    char** argv
)
{

    // sao duas Pessoa, em cada pessoa duas idades
    pessoas[0].idade[0] = 0;
    pessoas[0].idade[1] = 1;
    pessoas[1].idade[0] = 2;
    pessoas[1].idade[1] = 3;

    // sao dois Carro , em cada carro dois carro :)
    carros[0].carro[0] = 0;
    carros[0].carro[1] = 1;
    carros[1].carro[0] = 2;
    carros[1].carro[1] = 3;

    // p vai apontar para a primeira Pessoa, pessoas[0]
    printf("p vai apontar para a primeira pessoa...\n");
    p = pessoas;
    printf("idades em *p: %d e %d\n", p->idade[0], p->idade[1]);
    // p vai apontar para a segunda Pessoa, pessoas[1]
    p = p + 1;
    printf("somando um em p vai passar para a proxima pessoa...\n");
    printf("idades em *p: %d e %d\n", p->idade[0], p->idade[1]);

    // listando os valores em carros 
    printf(
        "valores de carro[] em carros[]: %d \t %d \t %d \t %d\n",
        carros[0].carro[0],
        carros[0].carro[1],
        carros[1].carro[0],
        carros[1].carro[1]
    );
    return  0;
}

mostra isso:

p vai apontar para a primeira pessoa...
idades em *p: 0 e 1
somando um em p vai passar para a proxima pessoa...
idades em *p: 2 e 3
valores de carro[] em carros[]: 0        1       2       3

C:\Users\toninho\source\repos\ch-struct\Debug\ch-struct.exe (process 11452) exited with code 0.

Mais uma nota:

Em geral e em especial para quem está aprendendo recomendo declarar as coisas como elas são de fato e em separado, para ajudar a fixar claramente o que está acontecendo. Exemplo:

struct pessoa pessoas[2], *p;

Declarar *p como uma struct pesssoa está  correto. Mas estamos declarando p e ao declarar

struct Pessoa* p;

p de fato é struct* pessoa

 

e então fica claro para o aluno e o leitor que a variável declarada, p, é um ponteiro para uma struct do tipo pessoa. Ao escrever struct pessoa *p isso se perde um pouco: estamos declarando *p ou p? Só um palpite, nem quero iniciar um debate :D mas estamos declarando p...

adicionado 55 minutos depois
Em 17/08/2019 às 12:51, Igor Vargas disse:

int i=0;
(p + i)->idade[i] = 1;
printf("%d",(p+i)->idade[i]);

 

 

Esqueci de comentar esse código...

Está ok, apenas p não aponta para lugar algum.

 

acrescente antes uma dessas

p= pessoas;		// aponta para a primeira pessoa
p= &pessoas[0]; 	// aponta para a primeira
p= &pessoas[1];		// aponta para a segunda pessoa

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!