Ponteiros em C:O que é ponteiro em programação C? Tipos
O que é ponteiro em C?
O Ponteiro em C, é uma variável que armazena o endereço de outra variável. Um ponteiro também pode ser usado para se referir a outra função de ponteiro. Um ponteiro pode ser incrementado/diminuído, ou seja, para apontar para a próxima/anterior localização de memória. O objetivo do ponteiro é economizar espaço de memória e obter um tempo de execução mais rápido.
Como usar ponteiros em C
Se declararmos uma variável v do tipo int, v na verdade armazenará um valor.
v é igual a zero agora.
No entanto, cada variável, além do valor, também tem seu endereço (ou, simplesmente, onde está localizada na memória). O endereço pode ser recuperado colocando um e comercial (&) antes do nome da variável.
Se você imprimir o endereço de uma variável na tela, parecerá um número totalmente aleatório (além disso, pode ser diferente de execução para execução).
Vamos tentar isso na prática com ponteiro no exemplo C
A saída deste programa é -480613588.
Agora, o que é um ponteiro? Em vez de armazenar um valor, um ponteiro armazenará o endereço de uma variável.
Variável de ponteiro
Int *y =&v;
VARIABLEPOINTERA valor armazenado em um nomeado endereço de armazenamento/memóriaUma variável que aponta para o endereço de armazenamento/memória de outro variável
Declarando um ponteiro
Assim como as variáveis, os ponteiros na programação C precisam ser declarados antes que possam ser usados em seu programa. Os ponteiros podem ser nomeados como você quiser, desde que obedeçam às regras de nomenclatura do C. Uma declaração de ponteiro tem o seguinte formato.
data_type * pointer_variable_name;
Aqui,
- tipo_de_dados é o tipo base do ponteiro dos tipos de variáveis de C e indica o tipo da variável para a qual o ponteiro aponta.
- O asterisco (*:o mesmo asterisco usado para multiplicação) que é o operador de indireção, declara um ponteiro.
Vamos ver algumas declarações de ponteiros válidas neste tutorial de ponteiros C:
int *ptr_thing; /* pointer to an integer */ int *ptr1,thing;/* ptr1 is a pointer to type integer and thing is an integer variable */ double *ptr2; /* pointer to a double */ float *ptr3; /* pointer to a float */ char *ch1 ; /* pointer to a character */ float *ptr, variable;/*ptr is a pointer to type float and variable is an ordinary float variable */
Inicializar um ponteiro
Depois de declarar um ponteiro, nós o inicializamos como variáveis padrão com um endereço de variável. Se os ponteiros na programação C não forem inicializados e usados no programa, os resultados serão imprevisíveis e potencialmente desastrosos.
Para obter o endereço de uma variável, usamos o operador comercial (&), colocado antes do nome de uma variável cujo endereço precisamos. A inicialização do ponteiro é feita com a seguinte sintaxe.
Sintaxe do ponteiro
pointer = &variable;
Um programa simples para ilustração de ponteiro é dado abaixo:
#include <stdio.h> int main() { int a=10; //variable declaration int *p; //pointer variable declaration p=&a; //store address of variable a in pointer p printf("Address stored in a variable p is:%x\n",p); //accessing the address printf("Value stored in a variable p is:%d\n",*p); //accessing the value return 0; }
Saída:
Address stored in a variable p is:60ff08 Value stored in a variable p is:10Operador Significado * Serve 2 propósitos
- Declaração de um ponteiro
- Retorna o valor da variável referenciada
- Retorna o endereço de uma variável
Tipos de ponteiros em C
A seguir estão os diferentes tipos de ponteiros em C :
Ponteiro Nulo
Podemos criar um ponteiro nulo atribuindo valor nulo durante a declaração do ponteiro. Este método é útil quando você não tem nenhum endereço atribuído ao ponteiro. Um ponteiro nulo sempre contém o valor 0.
O programa a seguir ilustra o uso de um ponteiro nulo:
#include <stdio.h> int main() { int *p = NULL; //null pointer printf(“The value inside variable p is:\n%x”,p); return 0; }
Saída:
The value inside variable p is: 0
Ponteiro vazio
Na programação C, um ponteiro void também é chamado de ponteiro genérico. Não possui nenhum tipo de dados padrão. Um ponteiro void é criado usando a palavra-chave void. Ele pode ser usado para armazenar um endereço de qualquer variável.
O programa a seguir ilustra o uso de um ponteiro void:
#include <stdio.h> int main() { void *p = NULL; //void pointer printf("The size of pointer is:%d\n",sizeof(p)); return 0; }
Saída:
The size of pointer is:4
Ponteiro selvagem
Um ponteiro é considerado um ponteiro selvagem se não estiver sendo inicializado para nada. Esses tipos de ponteiros C não são eficientes porque podem apontar para algum local de memória desconhecido que pode causar problemas em nosso programa e pode levar ao travamento do programa. Deve-se sempre ter cuidado ao trabalhar com ponteiros selvagens.
O programa a seguir ilustra o uso do ponteiro selvagem:
#include <stdio.h> int main() { int *p; //wild pointer printf("\n%d",*p); return 0; }
Saída:
timeout: the monitored command dumped core sh: line 1: 95298 Segmentation fault timeout 10s main
Outros tipos de ponteiros em 'c' são os seguintes:
- Ponteiro pendente
- Ponteiro complexo
- Ponteiro próximo
- Ponteiro distante
- Grande ponteiro
Ponteiros de acesso direto e indireto
Em C, existem duas maneiras equivalentes de acessar e manipular um conteúdo variável
- Acesso direto:usamos diretamente o nome da variável
- Acesso indireto:usamos um ponteiro para a variável
Vamos entender isso com a ajuda do programa abaixo
#include <stdio.h> /* Declare and initialize an int variable */ int var = 1; /* Declare a pointer to int */ int *ptr; int main( void ) { /* Initialize ptr to point to var */ ptr = &var; /* Access var directly and indirectly */ printf("\nDirect access, var = %d", var); printf("\nIndirect access, var = %d", *ptr); /* Display the address of var two ways */ printf("\n\nThe address of var = %d", &var); printf("\nThe address of var = %d\n", ptr); /*change the content of var through the pointer*/ *ptr=48; printf("\nIndirect access, var = %d", *ptr); return 0;}
Após compilar o programa sem erros, o resultado é:
Direct access, var = 1 Indirect access, var = 1 The address of var = 4202496 The address of var = 4202496 Indirect access, var = 48
Aritmética de ponteiro em C
As operações do ponteiro estão resumidas na figura a seguir
Linguagem C
- Variáveis C# e tipos de dados (primitivos)
- Tipos de funções definidas pelo usuário na programação C
- Ponteiros C
- Ponteiros C++ com exemplos
- O que é impressão 3D? Princípio de funcionamento | Tipos | Aplicativos
- Java - Tipos de Variáveis
- C - Ponteiros
- Tipos de variáveis C++
- Python - Tipos de Variáveis
- O que é soldagem?- Definição | Tipos de Soldagem