Introdução
Um ponteiro nulo (null pointer) é um ponteiro que não aponta para nenhum endereço de memória. Na programação em C, um ponteiro nulo é representado pela constante NULL, que é definida no arquivo de cabeçalho stdio.h. Usar um ponteiro nulo pode ajudar a evitar erros e adicionar funcionalidade aos programas em C.
Neste laboratório, você aprenderá sobre ponteiros nulos e como usá-los na programação em C. Você criará um programa que usa ponteiros nulos para pesquisar nomes em um array.
Nota: Você precisa criar o arquivo
~/project/main.cpor conta própria para praticar a codificação e aprender a compilar e executá-lo usando o gcc.
cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main
Declarar um Ponteiro Nulo
Na programação em C, um ponteiro nulo (null pointer) é um ponteiro que não aponta para nada. Para declarar um ponteiro nulo, você pode atribuir o valor NULL a uma variável ponteiro.
#include <stdio.h>
int main() {
int *ptr = NULL; // ptr is a NULL pointer
return 0;
}
Declarar um Ponteiro Void
Um ponteiro void é um ponteiro que não possui um tipo específico. Ele pode ser usado para apontar para qualquer tipo de dado. Para declarar um ponteiro void, use a palavra-chave void antes do asterisco (*).
Um ponteiro void deve ser convertido (cast) para outro tipo de dado antes que possa ser desreferenciado ou usado para aritmética de ponteiros.
#include <stdio.h>
int main() {
int n = 10;
void *ptr = &n; // ptr é um ponteiro void apontando para um int
printf("Value of n: %d\n", *(int*)ptr); // converte para ponteiro int antes de desreferenciar
return 0;
}
Usar Ponteiro Nulo para Marcar o Fim de um Array de Ponteiros
Você pode usar um ponteiro nulo (null pointer) para marcar o fim de um array de ponteiros na programação em C. Isso pode ser útil ao pesquisar nomes ou outros dados no array.
#include <stdio.h>
#include <string.h>
int search(char *ptr[], char* name);
char *names[] = {
"John",
"Peter",
"Thor",
"Chris",
"Tony",
NULL
};
int main(void)
{
if(search(names, "Peter") != 1)
{
printf("Peter is in the list.\n");
}
if(search(names, "Scarlett") == -1)
{
printf("Scarlett not found.\n");
}
return 0;
}
// define the search function
int search(char *ptr[], char*name)
{
for(int i=0; ptr[i]; ++i)
{
if(!strcmp(ptr[i], name))
{
return i;
}
}
return -1; // name not found
}
Personalizar o Programa para Entrada do Usuário
Você pode personalizar o programa para permitir que o usuário insira nomes para o array e pesquise por nomes. Isso pode ser feito usando a função scanf() na programação em C.
#include <stdio.h>
#include <string.h>
#define MAX_NAMES 100
int search(char *ptr[], char* name);
int main(void)
{
char *names[MAX_NAMES];
char name[50];
int count = 0;
printf("Enter names (press enter to stop):\n");
// get names from user input
while(1)
{
scanf("%s", name);
if(strcmp(name, "") == 0)
{
break;
}
names[count] = (char*) malloc(strlen(name)+1);
strcpy(names[count], name);
count++;
}
names[count] = NULL; // mark end of array with null pointer
// search for names
while(1)
{
printf("Enter name to search for (press enter to stop):\n");
scanf("%s", name);
if(strcmp(name, "") == 0)
{
break;
}
int index = search(names, name);
if(index != -1)
{
printf("%s is found in index %d.\n", name, index);
}
else
{
printf("%s not found.\n", name);
}
}
return 0;
}
// define the search function
int search(char *ptr[], char*name)
{
for(int i=0; ptr[i]; ++i)
{
if(!strcmp(ptr[i], name))
{
return i;
}
}
return -1; // name not found
}
Resumo
Neste laboratório, você aprendeu sobre ponteiros nulos (null pointers) e como usá-los na programação em C. Você viu como declarar um ponteiro nulo e um ponteiro void, e como usar um ponteiro nulo para marcar o fim de um array de ponteiros. Você também aprendeu como personalizar um programa para permitir a entrada do usuário e pesquisar nomes usando ponteiros nulos. Ao usar ponteiros nulos em seus programas, você pode torná-los mais robustos e evitar erros comuns.



