Galera uma luz aqui sobre ponteiros em c.

1. Galera uma luz aqui sobre ponteiros em c.

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/08/2016 - 17:10h

estou iniciando os estudos em ponteiros em c, mas ainda não vi funcionalidade para tal até agora, mas sei que é extremamente importante, para que serve o * eo & sei que o & é para o endereço na memoria mas e o *???


  


2. Re: Galera uma luz aqui sobre ponteiros em c.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/08/2016 - 02:26h

Um ponteiro é um valor que, ao mesmo tempo: (1) pode indicar um endereço na memória (durante a execução do programa); e (2) carrega informação sobre o tipo de dado pode estar contido nesse endereço de memória (durante a compilação).

Uma variável de um tipo ponteiro é uma variável que pode conter um dado desse tipo, conforme descrito no parágrafo acima.

Se eu tiver um valor de ponteiro que indique uma posição de memória válida durante a execução do programa, a aplicação do operador * (que significa “conteúdo de”) sobre esse ponteiro é uma forma de chegar ao dado contido nesse endereço. A operação inversa é obter um ponteiro (ou seja: um endereço mais a informação de tipo associado ao dado nele contido) a partir de um dado que ocupe algum endereço na memória (o que inclui variáveis, arrays, elementos de arrays e expressões resultantes da aplicação do operador “conteúdo de”, mas exclui constantes literais e valores temporários obtidos durante o cálculo de uma expressão), e é realizada por meio do operador &.

E para que serve essa tralha?

Serve para que partes do código (tipicamente funções) possam ter acesso a dados que tenham sido declarados ou criados em outras partes do código (outras funções), e que portanto não estão diretamente visíveis para as partes interessadas em manipular tais dados.

Se você já estudou devidamente funções, deve saber que os valores passados como parâmetros para a função são meras cópias dos valores usados como argumentos e que, da mesma forma, o valor recebido após o retorno da função também é apenas uma cópia do valor da expressão que havia dentro da função. Isso implica que, além de os objetos dentro e fora da função serem distintos, existe um custo associado à cópia desses objetos de um lado para o outro, que vai ser tanto maior quanto maiores e mais complexos forem eles. Se um desses objetos for uma estrutura com muitos campos internos ou com campos que são arrays, a cópia de tal dado poderá ser muito custosa. Além disso, dados que sejam de tipo array não podem ser diretamente copiados para outros arrays.

Usar ponteiros como parâmetros ou como tipo de retorno em funções é uma forma de contornar tanto o problema de falta de visibilidade quanto o de cópias muito caras de valores ao chamar ou retornar de uma função. Quando se copia o ponteiro para um dado, tanto o ponteiro original quanto a cópia do seu valor (endereço e tipo de dado associado) vão permitir chegar ao mesmo dado. Além disso, o tamanho de um ponteiro é pequeno, geralmente igual ou da mesma ordem de grandeza que o de um valor inteiro, e a cópia dessa quantidade de dados normalmente é considerada uma operação de baixo custo.


3. Re: Galera uma luz aqui sobre ponteiros em c.

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/08/2016 - 05:57h

Ponteiros apontam.

Dado um endereço de memória ele diz (aponta) o que tem lá.

*(endereço) = valor.

E o & faz o contrário. Dada uma variável mostra o endereço de onde está.

Experimente ver o endereço de uma variável usando a máscara hexadecimal do printf.

Você pode usar para umas coisas loucas como percorrer um array de caracteres.
Ou dentro de laços for.

char *lista = "abcdefghijklmnopqrstuvwxyz";

ou

= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};

depois

do {

...

} while (*(++p));

percorre os elementos. É uma possibilidade. O while() pára no valor igual a '\0'.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts