[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: freq_ABB




>>  > 2. Não entendi bem o processo que cria um nó novo:
>>  >
>>  > s_aux = (char *) malloc(strlen (s) + 1);
>>  > strcpy(s_aux, s);
>>  > t->palavra = s_aux;
>>  >
>>  > Não poderia usar t->palavra direto no lugar de s_aux, ja que os dois
são
>>  > do mesmo tipo e vão acabar apontando para a mesma cadeia?
>>
>> Eles nao apontam para a "mesma" cadeia.  Fazemos uma copia de s em s_aux.
>> Isto é importante, como acredito que mencionei em sala.  Caso não
fizéssemos
>> uma copia de s, quando fizéssemos a leitura da proxima palavra (em s!)
>> perderiamos a palavra lida anteriormente.
>
>Tudo bem, desde que ela esteja armazenada em t->palavra, não?

O que acontece é que t->palavra é apenas um APONTADOR, ou seja, não se
armazena um STRING nele e sim UM ENDEREÇO onde essa string se encontra.
O processo ocorre da seguinte maneira:

s é lido. Digamos que s seja "YOSHI" (não que eu esteja puxando o saco)
Quando fazemos t->palavra = s, t->palavra conterá um apontador o "Y", no
caso, o primeiro caractere da string. Ao lermos uma próxima palavra, t->
palavra continuará apontando para s, ou seja, a nova palavra. Não é o que
queremos. Queremos ARMAZENAR todas as palavras.

Para isso, usa-se o malloc, que aloca um pedaço da memória onde ele colocará
a palavra. Esse "pedaço" da memória está associado ao apontador  s_aux, que
aponta novamente para o 1o. caractere do espaço de memória alocado. Ao se
definir t->palavra = s_aux, estamos dizendo que a palavra que queremos ter
para t está no endereço de memória alocado anteriormente.

Será que as coisas estão mais claras agora. Eu, pra dizer a verdade, estou
começando só AGORA a entender essa filosofia de apontadores e alocações de
memória. Isso é realmente novo para que estava acostumado com Pascal ou
qualquer outra linguagem de mais alto nível. A linguagem C tem muitas
peculiaridades. Com certeza, todo mundo do BCC vai achar ridículo de fácil
essas peculiaridades. Mas isso no futuro (pelo menos para aqueles que estão
começando agora). Eu mesmo, pra dizer a verdade tenho muitas dificuldades em
C. Eu consigo ler um programa inteirinho e entendo ele, depois de algumas
repetições de leitura. Mas ainda tenho muita dificuldade em escrever. Nunca
sei se o que estou fazendo é a melhor coisa, se existe alguma maneira mais
fácil de escrever algum comando, enfim, estou apanhando feio do C.
As vezes acho que posso fazer uma analogia com a língua falada. Por exemplo,
muita gente entende bastante Inglês, mas na hora de falar é um gago de
primeira. Isso é só insegurança e falta de prática. Com o tempo e com a
prática adquiri-se segurança. É só isso que a gente precisa: um pouco mais
de tempo pra poder se acostumar com o maravilhoso mundo de C.

Falou!

Daniel Cukier
danicuki@linux.ime.usp.br
dcukier@colband.com.br
danicuki@base.com.br





>
>--
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>Tiago Minchillo da Silveira
>Kiron Multimídia - http://www.kiron.com.br
>Homepage pessoal em construção!!! Em breve divulgo o endreço.
>Nick no IRC/ICQ: Duke Jeffrie - UIN: 9350490
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
>