Jump to content

Qual é a necessidade de um pointer?


brunuu
 Share

Recommended Posts

Tenho alguams duvidas sobre o que é realmente um pointer, sei que um pointer vai buscar um valor a outra variável pela memoria mas não percebi quando é que realmente tenho que usar um e porquê que o iria usar se existe métodos para ir buscar um valor de uma variável que está já ali.

Até porque eu nunca tive que usar pointers em C# mas vejo que em C++ e no C é algo importante saber.

Não consigo imaginar em que tipo de partes de código devo realmente usar um pointer.

Edited by brunuu
Link to comment
Share on other sites

Até porque eu nunca tive que usar pointers em C#

lá porque em c# não se chamam pointers não quer dizer que não os uses ...

um pointer não é mais do que um valor que representa uma posição de memória, se não sabes para que serve, continua a estudar. a sua utilidade irá ser bem edivente mais tarde.

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Em c# também podes usar pointers (unsafe).

Alias, em c# nunca usaste o ref nos parametros? Passar uma variavel por referência não passa o valor mas sim informação da posição (entre outras coisas) para aceder diretamente ao local onde está armazenado o valor da variavel.

Alem de outras utilidades, é muito mais rapido andares a passar apenas a referencia ou pointeiro do que passar o conteúdo todo de um lado para outro

Link to comment
Share on other sites

um pointer não é mais do que um valor que representa uma posição de memória, se não sabes para que serve, continua a estudar. a sua utilidade irá ser bem edivente mais tarde.

Pelo que aprendi agora eu não tenho visto nenhuma altura que seja necessario, vou continuar estudando

Alias, em c# nunca usaste o ref nos parametros? Passar uma variavel por referência não passa o valor mas sim informação da posição (entre outras coisas) para aceder diretamente ao local onde está armazenado o valor da variavel.

Ok, percebi +- o que é um pointer, são um pouco estranhos de usar.

Link to comment
Share on other sites

Ponteiros são uma caracteristica de linguagens mais baixo nivel. O facto de não sentires necessidade de os utilizar em C# é devido as alternativas oferecidas pela própria linguagem, no entanto eles estão presentes (em references e delegates), mas estão escondidos dos procedimentos normais.

Outra coisa... as operações aritméticas de ponteiros podem até certo ponto serem simuladas em linguagens que não tem ponteiros (na definição de ponteiros em C), no entanto em geral as operações em ponteiros serão mais rápidas sabendo o que se está a fazer. Acentuo arduamente no "sabendo", porque basta falhar num alinhamento de memoria (cache alignment, page alignment) para destruir a performance em várias ordens de grandeza.

  • Vote 1

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Link to comment
Share on other sites

Pelo que aprendi agora eu não tenho visto nenhuma altura que seja necessario, vou continuar estudando

Estuda então porque não tarda nada vais precisar deles. Só de pensar no meu trabalho de fim de curso de C++ sem usar ponteiros até fico com dores de cabeça.

repara no seguinte sem ponteiro:

int duplica (int copia_de_num){
 copia_de_num*=2;
return copia_de_num;
}
int main(){
int  num= 2;
std::cout << "O valor de num e: "<< num << std::endl;
num = duplica(num);
std::cout << "O valor de num e: "<< num << std::endl;
return 0;
}

com ponteiro:

int duplica (int *ponteiro){
( *ponteiro)*=2;
}
int main(){
int  num= 2;
std::cout << "O valor de num e: "<< num << std::endl;
duplica(&num);
std::cout << "O valor de num e: "<< num << std::endl;
return 0;
}

já agora passar por referencia:

int duplica (int &referencia_a_num){
referencia_a_num *= 2;
}
int main(){
int num= 2;
std::cout << "O valor de num e: "<< num << std::endl;
duplica(num);
std::cout << "O valor de num e: "<< num << std::endl;
return 0;
}

Bom é claro que este exemplo é um pouco simples para perceber as grandes vantagens de ponteiros. Mas imagina um programa onde há milhentas funções que precisam de aceder a uma variável local á função main. Passa-se por referência em vez de andar a fazer cópias de variáveis que é um método mais ineficiente e que num programa muito grande pode inclusive roubar performance, para além de ser mais trabahoso.

Passar por referencia ou usar um ponteiro no exemplo acima vai dar ao mesmo mas os ponteiros tem algumas vantagens avançadas como aritmética de ponteiros de até podes reutilizar um ponteiro.

Imagina que tens um ponteiro a apontar para a variável A. A qualquer momento se precisares agarras no mesmo ponteiro e dizes-lhe para passar a apontar para a variável B. Desde que a variável A e B sejam do mesmo tipo não há problema. Aliás até podes ter um ponteiro a apontar para nada (NULL).

Edited by CarlosTex
  • Vote 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.