Ir ao conteúdo
  • Cadastre-se

Como criar vetor de struct em C


JACK_SNOWSTALKER
Ir à solução Resolvido por Ansi C,

Posts recomendados

Olá amigos, tudo bem com vocês?

 

Estou com um problema que pensei que não teria, eu não consigo criar um vetor de estruturas, alguem sabe como fazer isso (dinâmicamente, com malloc)?

 

Estrutura de exemplo:

 

Typedef struct listazinha

{

int chave;

struct listazinha *prox;

}listazinha;

 

como eu criaria um vetor com ponteiros pra estruturas dessa? e como eu definiria uma posição como NULL para inicializar?

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>#include <stdlib.h>struct minhaLindaEstrutura {    int olhasohquelindoesseint;    char essechartambemnaoehdesejogarfora;};int main() {    int tamanhoDoVetor = 5;    struct minhaLindaEstrutura *ponteiroPraMinhaEstrutura;     // se o compilador for C++    ponteiroPraMinhaEstrutura = (struct minhaLindaEstrutura*) malloc( sizeof(struct minhaLindaEstrutura) * tamanhoDoVetor );     // se o compilador for C puro    // ponteiroPraMinhaEstrutura = malloc( sizeof(struct minhaLindaEstrutura) * tamanhoDoVetor );    ponteiroPraMinhaEstrutura[0].olhasohquelindoesseint = 10;    ponteiroPraMinhaEstrutura[0].essechartambemnaoehdesejogarfora = 'a';    // mesma coisa acima    (*ponteiroPraMinhaEstrutura).olhasohquelindoesseint = 10;    (*ponteiroPraMinhaEstrutura).essechartambemnaoehdesejogarfora = 'a';     // não esqueça de limpar a casa    free(ponteiroPraMinhaEstrutura);    return 0;}
Link para o comentário
Compartilhar em outros sites

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

[ com que você escreveu, eu entendi um vetor de estrutura ]

você quer algo do tipo:

typedef int* pint;pint Arr[ 10 ]; // 10 ponteiros para intint num;Arr[ 5 ] = &num;

So que ao invés, de int você gostaria de struct qualquer, invés do operador [  ], você quer usar malloc( ), é isso?

Link para o comentário
Compartilhar em outros sites

Eu continuo sem entender...

struct teste {    int x;};int main() {    int N = 10;    struct teste *ponteiro;    ponteiro = malloc(sizeof(struct teste) * N);    //ponteiro[0].x <-- acesso o inteiro x na posição 0    //ponteiro[1].x <-- acesso o inteiro x na posição 1    //ponteiro[2].x <-- acesso o inteiro x na posição 2    //...    free(ponteiro);    return 0;}
struct teste {    int x;};int main() {    struct teste *ponteiro[10];    ponteiro[0] = malloc(sizeof(struct teste));    ponteiro[1] = malloc(sizeof(struct teste));    ponteiro[2] = malloc(sizeof(struct teste));    //ponteiro[0]->x <-- acesso o inteiro x na posição 0    //ponteiro[1]->x <-- acesso o inteiro x na posição 1    //ponteiro[2]->x <-- acesso o inteiro x na posição 2    //...    free(ponteiro[0]);    free(ponteiro[1]);    free(ponteiro[2]);    return 0;}
É isso?
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

você entendeu, era isso o que eu queria, eu me perdi nos ponteiros, sempre me perco, pensei que era ponteiro para ponteiro.

 

Também me enganei sobre como passar o vetor de ponteiro para estrutura como argumento.

 

é que eu quero fazer uma tabela com estruturas, mas precisava de um vetor com ponteiros para estruturas, iniciar todas as posições como NULL, e ir colocando estruturas nas posições conforme o programa roda. Eu me perdi nos ponteiros.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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...