• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

[C] pointers

19 mensagens neste tópico

Master's em C, ninguem se disponibiliza para fazer um tutorial oficial (linguagem newbie, para que os mais recentes possam entender) de pointers (ponteiros) ?

Até agora estou a dar me bem com a explicação do Livro do Luis Damas mas queria mais ajuda :)

se alguem se disponibilizar , agradecia e até podia ser um artigo oficial da revista p@p  :cheesygrin:

Um abraço , Gurzi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, era mto útil para todos os que estamos a iniciar-nos em C...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

prometo que vou fazer um big tutorial sobre isto, deixem-me só acabar de analizar isto :P

mas se algum master quiser, dava mais jeito :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só sei pointers em c++

existem algumas diferenças!! em C ponteiros é mto usado e em C++ ja nem tanto...

acho que ainda nao coloquei aqui este....se for repetido nao faz mal...o que interessa é ser util :

http://www.di.ufpb.br/liliane/aulas/index_ED.htmll

http://www.ime.usp.br/~pf/algoritmos/

wwwp.fc.unesp.br/~erich/ed.html

gostei mto de os ler!!  :P

vejam sao mto bom tutis... talvez mais direccionado para TAD's, mas tb tem ponteiros...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ainda ei de fazer eu tutoriais para o p@p sobre isto, dont worryy :P

tofas depois como tu és expert nisto avalias o meu work :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ainda ei de fazer eu tutoriais para o p@p sobre isto, dont worryy :P

tofas depois como tu és expert nisto avalias o meu work :P

já esqueci 1 pouco isso por isso nao fiz nada para voces.... ta, mas peço que vejas mais coisas para alem do livro do luis damas, pq acham que no livro nao explicam bem  :dontgetit:

bom trabalho  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

existem algumas diferenças!! em C ponteiros é mto usado e em C++ ja nem tanto...

Os ponteiros usados em C, tambem são usados em C++ de igual modo.

Mas em C++ existe algo requintado que em C não podes fazer e que substitui os ponteiros de C.

Que é a passagem por referência com o operador &

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em C também.

Pointeiros são iguais em tudo o que é linguagem C (C# de C só tem o nome.).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em C também.

Pointeiros são iguais em tudo o que é linguagem C (C# de C só tem o nome.).

Eu estava a falar nisto:

A referência (referência a um objecto) é algo só disponível em

C++ (não existe em C).

int i =3;

int &j = i;

Isto pode ser confuso mas tem o significado “dar à variável i um

segundo nome”.

Em programação orientada por objectos as referências são

importantes pois são meios eficientes de passar objectos como

parâmetros

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deve ser uma questão linguistica.

Passar parametros por referencia ou valor é possivel em C (caso contrário apontadores não fariam sentido), passar objectos em C não é possivél (porque não existe o conceito sequer).

C é uma linguagem estruturada, C++ é OO.

int i=0; int &i=i; é prefeitamente possível. (visto que int é um tipo de dados básico e não um objecto).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Eu posso tentar explicar qualquer coisita de ponteiros em C, mas como não os uso muito vou só explicar as coisas mais básicas.

Então aqui vai:

Noção de Ponteiro

-> Um ponteiro é uma variável que contém o endereço de uma variável

Ou seja, se tivermos num um inteiro e p um ponteiro

p = &num      , diz-se que p aponta para num

&

O operador unário & dá o endereço de um objecto. Só se aplica a objectos em memória como variáveis e arrays. NÃO se pode apliar a expressões ou contastes.

*

Este operador é a variável apontada por. Ou seja aplicando este operador a um ponteiro acedemos ao objecto para o qual este aponta.

Pequeno exemplo:

int x=1, y=2, z[10];

int *ip                /*ponteiro paran uma variavel int*/

ip = &x;            /*ip aponta para x*/

y = *ip;            /*y fica com o valor da variavel apontada por ip. y passa a ser 1*/

*ip = 0;            /*a variavel apontada por ip passa a ser 0. x pass a ser 0*/

ip = &z[0]          /*ip aponta para z[0]*/

E pronto sei que não é muito mas para quem não conheçe o conceito de ponteiros, ou para quen está a começar, acho que deve de ajudar.

Como o tempo não é muito, há que aproveitar os ultimos dias de férias, depois se quiserem eu deixo aqui mais qualquer coisa.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deve ser uma questão linguistica.

Passar parametros por referencia ou valor é possivel em C (caso contrário apontadores não fariam sentido), passar objectos em C não é possivél (porque não existe o conceito sequer).

C é uma linguagem estruturada, C++ é OO.

int i=0; int &i=i; é prefeitamente possível. (visto que int é um tipo de dados básico e não um objecto).

Apesar de ambos compilarem, isso não implica que façam a mesma coisa.

Em C++ isto:

int i =3;
int &j = i;

Faz com que j=3 e se alterares o i -> altera o j e vice-versa, ou seja, temos "uma variável" com diferentes nomes.

Enquanto que em C

int i =3;
int &j = i;

Isto força que o endereço de memória do j seja 3. E o valor de j é o que estever nesse endereço!

Para em C fazeres algo parecido utilizas apontadores: que é uma variável em que tem como valor o endereço de memória de outra.

Então fazes isto:

int i=3
int *j = &i

Ou seja, temos duas variáveis em que uma delas é um apontador j que tem como valor o endereço de memória do i. O endereço de memória do i é obtido colocando & antes do i. O que é diferente do que acontece em C++.

Numa tentativa de fazer em C a passagem por referência que ocorre em C++, seria uma coisa do gênero (não sei se isto compila):

int i=3
int &j = &i

Ou seja, duas variáveis com o mesmo endereço de memória, ou por outras palavras, "uma variável" com diferentes nomes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Confesso que me baralhaste.

É possivel que tenhas razão, mas penso que funcionam da mesma maneira.

De qq forma só mesmo experimentado todas as situações que colocaste.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

brinkaero: de facto esse codigo nao faz sentido em C. Sei C muito bem mas C++ não tanto pq nunca tive grande paciencia para ler o stroustrap, mas de facto uma das poucas coisas que nao gosto no C++ é a passagem por referencia, não permite fazer nada que não se faca com o mecanismo de C e complica as coisas porque "ofusca" o que sao ponteiros e o que são tipos verdadeiros etc... Alias, eu aposto que os gajos para implementarem a referencia simplesmente metem o operador de conteudo antes. do tipo , kuando fazes

int &j=i;

j=23;

o k ele faz de facto é

int* j=&i;

*j = 23;

e obtens o mesmo comportamento de alterar o valor das duas variaveis ao mesmo tempo... Corrigam-me se estou errado, mas kuando vi isto no C++ simplesmente ignorei... não há nada como um ponteiro pa ponteiro pa ponteiro pa ponteiro ... pa ponteiro  para a cena :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

brinkaero: de facto esse codigo nao faz sentido em C. Sei C muito bem mas C++ não tanto pq nunca tive grande paciencia para ler o stroustrap, mas de facto uma das poucas coisas que nao gosto no C++ é a passagem por referencia, não permite fazer nada que não se faca com o mecanismo de C e complica as coisas porque "ofusca" o que sao ponteiros e o que são tipos verdadeiros etc... Alias, eu aposto que os gajos para implementarem a referencia simplesmente metem o operador de conteudo antes. do tipo , kuando fazes

int &j=i;

j=23;

o k ele faz de facto é

int* j=&i;

*j = 23;

e obtens o mesmo comportamento de alterar o valor das duas variaveis ao mesmo tempo... Corrigam-me se estou errado, mas kuando vi isto no C++ simplesmente ignorei... não há nada como um ponteiro pa ponteiro pa ponteiro pa ponteiro ... pa ponteiro  para a cena :D

É o seguinte, sinceramente não percebo muito o que está por de trás do compilador C++.

Quem me ensinou isto da passagem por referência é um prof. cromo em progamação no técnico (ele é do tempo em que a programação era feita com cartões perfurados!!), principalmente em C.

Ele disse que nos íamos programar em C++ por ser mais restrito que C (em C podemos fazer todas as aldabrices que quisermos).

Ele também referiu que a passagem por referência em C++ não o mesmo que os ponteiros em C e que era uma coisa mais requintada. Como ele diz: "É como se tivessemos uma variável com dois nomes". Talvez internamente tenhas razão e isto seja um apontador com condições muito restritas para evitar erros dos quais o compilador não consegue detectar!

Para os apontadores normais podes fazer o que quiseres que o compilador não se queixa, agora em C++ a passagem de referência tem de ser sempre inicializada e depois da inicialização esta não pode mudar de referência:

int num1 = 10;
int num2 = 20;

int &RefOne = num1;          // valid
int &RefOne = num2;          // error, two definitions of RefOne
RefOne = num2;                       // assign num2 to num1
int &RefTwo;                 // error, uninitialized reference
int &RefTwo = num2;          // valid

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, pois de facto deve ser como dizes, mas continuo com a minha opiniao, visto que as "aldrabices" que podes fazer em C sao um mecanismo perigoso mas muito útil se usado com cuidado. Apenas perguntei por curiosidade pq tou a fazer agora um compilador para uma linguagem com ponteiros e questionei-me como implementaram, mas internamente deve ser de facto um ponteiro mas com mais restriçoes. Quando tiver mais tempo investigo melhor isso e talvez veja a utilidade das referências, fica bem []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:P Oi Malta!!

Pessoalmente acho o livro de Luís Damas um optimo Livro para quem está a começar a aprender ;), mas para aprofundar conhecimentos não é o ideal  :wallbash:. Um Livro que acho excelente é sem duvida C programming de K.N.kING  ;), É 5 ESTRELAS , so tem um senão, é em ingles, mas quem perceber de ingles, é canja  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora