Usar Apontador Amperímetro e Notação em C
-
Utilizar a notação
&varpara obter o endereço de uma dada variável -
Utilize a notação
*ptrpara aceder ao valor da variável a partir do ponteiro -
Utilize a notação Ampersand
¶ passar o endereço dos objectos para as funções
Este artigo introduzirá múltiplos métodos sobre como utilizar os amperes e notação do ponteiro em C.
Utilizar a notação &var para obter o endereço de uma dada variável
Os apontadores são simplesmente variáveis que contêm os endereços da memória. São declarados com a notação type *var. Ao ponteiro pode ser atribuído qualquer endereço do mesmo tipo, e qualquer tipo de ponteiro pode armazenar o ponteiro void*, que é chamado de ponteiro genérico. Uma vez que temos um tipo que armazena os endereços dos objectos, deve haver um operador que forneça acesso a um.
O símbolo de amperes e & é utilizado como um operador unário frequentemente referido como o operador de address-of. Pode ser utilizado em objectos de dados e funções para recuperar o endereço no qual o objecto é armazenado.
Suponha que temos um número inteiro x declarado e inicializado como se mostra no exemplo seguinte. Nesse caso, podemos tomar o seu endereço com o operador de ampersand & e atribuí-lo à variável int *xptr. Como resultado, xptr aponta para o valor de 10233, e o operador * pode ser utilizado para aceder ao seu valor no código subsequente.
Note-se que o asterisco * é aqui utilizado em dois contextos diferentes. Um é para declarar uma variável do tipo ponteiro. O outro é para aceder ao valor do ponteiro para a variável, a última das quais é chamada de desreferenciação.
#include <stdio.h>
#include <stdlib.h>
int main() {
int x = 10233;
int *xptr = &x; // xptr now points to x
printf("x: %d\n", x);
printf("*xptr: %d\n", *xptr);
exit(EXIT_SUCCESS);
}
Resultado:
x: 10233
*xptr: 10233
Utilize a notação *ptr para aceder ao valor da variável a partir do ponteiro
O operador de desreferenciação pode ser utilizado para recuperar valores das indicações e atribuí-los a variáveis do mesmo tipo. Note-se que, * o operador não pode ser utilizado com apontadores null ou inválidos porque resulta num comportamento indefinido. Na maioria dos cenários, se se tentar o ponteiro null, é provável que o programa falhe. Mas se o ponteiro inválido for acedido, pode passar despercebido. Um ponteiro inválido pode apontar para algum objecto arbitrário na memória, e as operações sobre ele continuarão, mas pode danificar a correcção do estado do programa.
#include <stdio.h>
#include <stdlib.h>
int main() {
int x = 10233;
int *xptr = &x; // xptr now points to x
int y = *xptr; // y now holds the value 10233
printf("x: %d\n", x);
printf("y: %d\n", y);
exit(EXIT_SUCCESS);
}
Resultado:
x: 10233
y: 10233
Utilize a notação Ampersand & para passar o endereço dos objectos para as funções
O exemplo mais comum de utilização dos destinatários do operador é passar um ponteiro para o objecto como argumento de função. O exemplo seguinte demonstra a função swap que toma dois apontadores inteiros como argumentos. Note-se que quando o swap é chamado a partir da função main, o operador de ampersand é utilizado para passar os endereços das variáveis x e y. No entanto, o operador * no corpo da função swap denota o desreferenciamento do ponteiro.
#include <stdio.h>
#include <stdlib.h>
void swap(int *x, int *y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
int main() {
int x = 10233;
int y = 10133;
printf("x:%d, y:%d\n", x, y);
swap(&x, &y);
printf("x:%d, y:%d\n", x, y);
exit(EXIT_SUCCESS);
}
Resultado:
x:10233, y:10133
x:10133, y:10233
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook