brunuu Posted March 2, 2015 at 10:58 PM Report Share #578605 Posted March 2, 2015 at 10:58 PM (edited) 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 March 2, 2015 at 10:58 PM by brunuu Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 3, 2015 at 06:36 AM Report Share #578617 Posted March 3, 2015 at 06:36 AM 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 Portugol Plus Link to comment Share on other sites More sharing options...
nelsonr Posted March 3, 2015 at 09:20 AM Report Share #578619 Posted March 3, 2015 at 09:20 AM 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 More sharing options...
brunuu Posted March 3, 2015 at 01:17 PM Author Report Share #578655 Posted March 3, 2015 at 01:17 PM 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 More sharing options...
HappyHippyHippo Posted March 3, 2015 at 01:36 PM Report Share #578658 Posted March 3, 2015 at 01:36 PM Pelo que aprendi agora eu não tenho visto nenhuma altura que seja necessario, vou continuar estudando eu tambem não sei o que já estudaste, e não serei eu que irei complicar a matéria toda ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
shumy Posted March 3, 2015 at 11:52 PM Report Share #578715 Posted March 3, 2015 at 11:52 PM 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. 1 Report 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 More sharing options...
CarlosTex Posted March 12, 2015 at 01:58 AM Report Share #579188 Posted March 12, 2015 at 01:58 AM (edited) 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 March 12, 2015 at 01:58 AM by CarlosTex 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now