Inufelipe Postado Abril 29, 2007 Denunciar Share Postado Abril 29, 2007 Ola galera do script brasil forum.Eu gostaria de saber para que servem ponteiros em C?Eu sei que é para apontar para uma outra variavel ou local na memoria...mais eu queria uma utilidade fora do "FILE *f" e em uma função para alterar um dadoque não é global e nem da função.falou. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas de Abreu Postado Abril 29, 2007 Denunciar Share Postado Abril 29, 2007 Muito boa a sua pergunta. Na minha opiniao a verdadeira magica da programacao esta na manipulacao de ponteiros. Primeiramente, um ponteiro nada mais é, como voce mesmo disse, que um endereco de memoria. Mas isso é um recurso muito maior do que parece. Um vetor é um ponteiro. A variavel que voce declara como vetor nada mais é que um ponteiro para o primeiro elemento do seu vetor. Alocacao dinamica da memoria so é possivel porque voce pode armazenar o endereco dela em um ponteiro. Quando voce da um malloc, por exemplo, voce nem imagina onde a memoria esta, mas voce pode acessa-la usando um ponteiro. Quando voce constroi estruturas de dados mais complexas (como listas ligadas, arvores, heaps, etc) voce precisa o tempo todo lidar com ponteiros pois estas estruturas são alocadas em qualquer area da memoria. Mas da pra usar exemplos mais simples. Quando voce quer fazer uma funcao que troque de lugar o valor de duas variaveis, o que voce faz? Voce faz a funcao receber dois ponteiros para que a alteracao feita dentro da funcao se reflita fora tambem. Alias, na maior parte das vezes que voce precisa que uma funcao tenha efeitos sobre algo que esta fora dela voce vai precisar passar um ponteiro. Praticamente, assim que comecamos a desenvolver sistemas mais complexos (em que é preciso utilizar tecnicas de engenharia de software) mais e mais problemas que surgem são resolvidos com ponteiros. Tem mais algumas milhoes de coisas que daria pra citar, mas acho que já deu pra entender.Ah, e FILE voce declara como um ponteiro (FILE *) porque a estrutura FILE precisa ser alterada dentro das funcoes que a manipulam. Voce encontra coisas assim em praticamente todas as libs. Quando voce resolve escrever algoritmos genericos então, praticamente voce so usa ponteiros. Isso sem contar toda a parte de simulacao de recursos que o C não tem, como serializadores. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Bittencourt Muniz Postado Abril 30, 2007 Denunciar Share Postado Abril 30, 2007 Gostei da explicação! Muito boa!Mas agora, só uma pergunta: o que são serializadores?Falows! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas de Abreu Postado Abril 30, 2007 Denunciar Share Postado Abril 30, 2007 Serializadores são funcoes que recebem um objeto (em C seriam as structs) e gravam ele em um arquivo. Java vem com uma interface Serializer que torna possivel a serializacao. C++ eu não sei se tem suporte. Pra C, eu nunca vi, mas estou trabalhando em uma solucao e assim que tiver terminado eu abro o fonte dela. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Bittencourt Muniz Postado Abril 30, 2007 Denunciar Share Postado Abril 30, 2007 Ah sim! Existe isso em .Net! Lembrei agora, pois, nunca pensei que fosse "a mesma serialização" que falamos em .Net (pensei que esse termo se referia a "outros 500")Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Inufelipe Postado Maio 9, 2007 Autor Denunciar Share Postado Maio 9, 2007 Cara, desculpe-me, mas...qual a vantagem de fazer:int *p; p = new int; *p = 3; delete p; se eu posso fazer isso: int p; p = 3;falous. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe Pedroso Postado Maio 9, 2007 Denunciar Share Postado Maio 9, 2007 Alocação dinâmica!Você pode alocar espaço o quanto quiser e depois descartar para poder alocar outra coisa evitando desperdício. Ou seja, no primeiro caso você liberou memória durante seu programa. Já no segundo a variável só vai deixar de existir se a função/programa acabar! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas de Abreu Postado Maio 9, 2007 Denunciar Share Postado Maio 9, 2007 Nesse caso pequeno não tem muita vantagem mesmo. Mas quando voce usa grandes quantidades de memoria, se ela não for alocada dinamicamente, pode comprometer a pilha que a linguagem usa para chamada de funcoes, etc. (declaracoes estaticas são mantidas nessa pilha). Tenho um tutorial explicando a pilha do C em http://vidageek.net/2007/03/02/dia-c-pilha-do-c/ . Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Inufelipe Postado Maio 9, 2007 Autor Denunciar Share Postado Maio 9, 2007 valeu!!!Mais uma pergunta,se eu tiver um codigo assim:#include <stdio.h> int main(){ int *p; while(1){ p = new int; } }isso vai estourar a pilha ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas de Abreu Postado Maio 9, 2007 Denunciar Share Postado Maio 9, 2007 não, porque o operador new faz alocacao dinamica de memoria. Cada objeto em C++ possui seu proprio alocador de memoria. é realmente util e eficiente. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Inufelipe
Ola galera do script brasil forum.
Eu gostaria de saber para que servem ponteiros em C?
Eu sei que é para apontar para uma outra variavel ou local na memoria...
mais eu queria uma utilidade fora do "FILE *f" e em uma função para alterar um dado
que não é global e nem da função.
falou.
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.