Ir ao conteúdo
  • Cadastre-se

Alocando vetores dinâmicamente - como fazer?


io.gh0st

Posts recomendados

Bom pessoal, eu estou fazendo um programinha em linha de comando apenas pra treinar (uma calculadora) e gostaria de fazer algo do gênero:

- pergunta quantos valores serão usados

- cria as variáveis (ou usa as já definidas) necessárias

- soma os valores das variáveis usadas

- apaga todas as variáveis usadas

Ouvi dizer que isso é feito com alocação dinâmica de vetores... mas, como eu faço isso? Alguém me "exprica"? ^_^

Valeu!

Link para o comentário
Compartilhar em outros sites

Isso é um vetor alocado estaticamente.

int x[10];

Isso é o mesmo vetor alocado dinamicamente:

int *x;

int num;

scanf("%d", &num);

x = malloc(sizeof(int) * num);

No primeiro caso você tem um tamanho predefinido (10).

No segundo caso o tamanho do vetor vai ser definido durante a execução do código, pela variável que estiver em 'num'. Ou seja, dinamicamente.

Link para o comentário
Compartilhar em outros sites

aah sim... deu pra entender um pouco...

mas, pra variar e complicar, como eu faria, por exemplo, pra que o número de valores fosse 'infinito'?

Algo assim: o programa não pergunta nada. Apenas pede que você entre com os valores e você entra com quantos você precisa, mas sem enumerá-los. (algo do tipo, ao invés de digitar quantos valores você precisa, você digita os valores em si até ter digitado tudo o que precisa Oo)

Ficou meio complicado de entender, mas acho que dá... :P

Edit:

outra coisa... depois de alocar os vetores, como eu faço pra usá-los? Como coloco dados neles? '-'

Link para o comentário
Compartilhar em outros sites

aah sim... deu pra entender um pouco...

mas, pra variar e complicar, como eu faria, por exemplo, pra que o número de valores fosse 'infinito'?

Algo assim: o programa não pergunta nada. Apenas pede que você entre com os valores e você entra com quantos você precisa, mas sem enumerá-los. (algo do tipo, ao invés de digitar quantos valores você precisa, você digita os valores em si até ter digitado tudo o que precisa Oo)

Ficou meio complicado de entender, mas acho que dá... :P

Edit:

outra coisa... depois de alocar os vetores, como eu faço pra usá-los? Como coloco dados neles? '-'

Seria melhor você trabalhar então com listas ligadas, assim nao precisaria se preocupar com o tamanho-apenas iria inserindo o valor e alocando na heap.

Complementando o coment do nosso amigo DontPanic, para atribuir valores e imprimir poderiamos fazer:


#include <stdio.h>
#include <stdlib.h>

int main(){
int i;
int *x;
int num;
scanf("%d", &num);
x =(int *) malloc(sizeof(int) * num);

for(i=0;i<num;i++)
scanf("%d",&x[i]);

for(i=0;i<num;i++)
printf("\n%d",x[i]);

system("PAUSE");
}

Aqui temos o valor de num(que determinará o tamanho do vetor)fixado pelo usuario. Se quisessemos algo flexivel, onde nao fosse preciso determinar o tamanho do vetor, usuriamos listas ligadas...Talvez até exista uma solução, se alg souber...

Entretanto, quando fazemos a linha

 x =(int *) malloc(sizeof(int) * num);

Estamos alocando memoria na heap de forma contigua, caracteristica tipica de um vetor e se não houvesse esse num , cada vez que voce alocasse memoria ela ficaria em uma regiao da memoria nao-contigua e precisarimos recuperar esses endereços na memoria atraves de ponteiros e então teriamos algo como uma estrutura de listas ligadas..

Se estiver errado, sintam-se a vontade de me corrigir

Link para o comentário
Compartilhar em outros sites

Na verdade, o meu problema nada mais é do que 'curiosidade'. Não preciso fazer isso pra trabalho, não tenho chefe me cobrando isso pra quinta que vem nem nada do gênero. Quero apenas aprender como se faz.

Agora, como eu faço essas listas encadeadas? Não sei se comentei, mas o que eu tenho de programação na cabeça é bem básico, nada muito avançado...

Link para o comentário
Compartilhar em outros sites

Lista encadeadas não são muito complicadas, mas requer um conhecimento médio da linguagem C pelo menos. Nada que um bom livro não resolva.

A ideia é você criar uma estrutura, e essa estrutura guarda um valor e um ponteiro que aponta pra outra estrutura do mesmo tipo dela.

Então no final você fica com um tipo de lista que tá ligada entre seus elementos.

Aqui tem vários exemplos:

http://pt.wikibooks.org/wiki/Programar_em_C/Listas_encadeadas

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!