Existem três maneiras de se reservar espaço de memória para
o armazenamento de informações:

Uso de variáveis globais – o espaço reservado existe enquanto
o programa estiver sendo executado.
Uso de variáveis locais – o espaço reservado existe apenas
enquanto a função que declarou a variável está sendo
executada.
Reservar um espaço na memória dinamicamente: requisitar ao
sistema, em tempo de execução, um espaço de um
determinado tamanho.

A função malloc:

 

  • Recebe como parâmetro o número de bytes que se deseja alocar.
  • Retorna o endereço inicial da área de memória alocada.

Alocação dinâmica de um vetor de inteiros com 10 elementos, exemplo:

Se a alocação for bem sucedida, ‘v’ armazenará o endereço inicial de uma área contínua de memória suficiente para armazenar 10 valores inteiros.

Operador sizeof(tipo) retorna o número de bytes que um
dado tipo ocupa na memória.

Exemplo esquemático do que ocorre na memória:

Se não houver espaço livre suficiente para realizar a alocação,
a função malloc retorna um endereço nulo (NULL).

A liberação do espaço alocado dinamicamente é feito através do uso da função ‘free()’, que recebe como parâmetro o ponteiro da memória a ser liberada.

OBS:

  • Só devemos passar para a função free um endereço de memória que tenha sido alocado dinamicamente.

 

  • Uma vez liberado o espaço de memória alocado, o mesmo não pode mais ser acessado.
  • Enquanto a função free não for utilizada, o espaço alocado dinamicamente permanecerá válido mesmo após o término de uma dada função.

Ponteiro é um recurso da linguagem C que consiste em:

  • Apontar ou acessar endereços de memória.
  • Acessar variáveis que não são acessíveis em uma função.
  • Retornar um ou mais valores em uma função.
  • Entre outros…

Como declarar um ponteiro:

Exemplo:

No exemplo acima um ponteiro ‘p’ e uma variável ‘q’ são declarados, ‘q’ recebe 1 e ‘p’ recebe o endereço de memória da variável ‘q’, vale lembrar que o & (‘e’ comercial) mostra o endereço de memória, como ‘p’ é um ponteiro então ele apontará para o valor que está armazenado naquele endereço de memória. Imagine gavetas enumeradas de um guarda-roupa, podemos imaginar essa numeração como endereços de memória e o que o ponteiro faz é apontar para numeração dessa gaveta, mostrando o seu conteudo:

 Usando ponteiros em funções:

O programa acima terá a seguinte saída:

Valor de X antes da funcao: 1
Ponteiro P: 1
Valor de X depois da funcao: 2

A variável ‘x’ é declarada com o valor igual à 1, o endereço de memória da variável ‘x’ é passado ao ponteiro ‘p’ através dos parâmetros da função ‘func’, então ‘p’ aponta para o endereço de ‘x’ e atribui o valor 2.

Em C uma expressão verdadeira é uma expressão que é igual ou que retorna qualquer valor diferente de 0 e uma expressão falsa é igual ou retorna 0.

A forma geral da sentença If e Else é:

Exemplo:

No exemplo acima a condição “if” é executada, como 1 não é maior que 2, zero é retornado e a expressão é tida como falsa então o else é executado e exibirá na tela a palavra “Falso”.

OBS: Um erro comum é no uso do sinal “=” ao tentar comprar se dois valores são iguais. Em C vale lembrar que o sinal “=” é usado para atribuição e “==” para comparação, então quando for comprar igualdade entre dois valores deve-se usar “==” ao invés de “=”.

 

If e Else aninhados:

Quando mais de uma expressão for colocada dentro da condição If ou Else, deve-se colocar as expressões entre chaves como mostra o exemplo:

Simples gerador de CPF em C/C++. criado por mim com código fonte e download logo abaiaxo:

Download: Gerador de CPF

Código fonte: