Isto nos permiteescrever a nossa funcao StrCpy(), que funcionara de forma semelhante a funcao strcpy() dabiblioteca:#include <stdio.h>void StrCpy (char *destino,char *origem){while (*origem){*destino=*origem;origem++;destino++;}*destino=\0;}int main (){char str1[100],str2[100],str3[100];printf ("Entre com uma string: ");gets (str1);49StrCpy (str2,str1);StrCpy (str3,"Voce digitou a string ");printf ("\n\n%s%s",str3,str2);return(0);}Ha varios pontos a destacar no programa acima. Observe que podemos passar ponteiroscomo argumentos de funcoes. Na verdade e assim que funcoes como gets() e strcpy()funcionam. Passando o ponteiro voce possibilita a funcao alterar o conteudo das strings. Voceja estava passando os ponteiros e nao sabia. No comando while (*origem) estamos usando ofato de que a string termina com \0 como criterio de parada. Quando fazemos origem++ edestino++ o leitor poderia argumentar que estamos alterando o valor do ponteiro-base dastring, contradizendo o que recomendei que se deveria fazer, no final de uma secao anterior. Oque o leitor talvez nao saiba ainda (e que sera estudado em detalhe mais adiante) e que, no C,sao passados para as funcoes copias dos argumentos. Desta maneira, quando alteramos oponteiro origem na funcao StrCpy() o ponteiro str2 permanece inalterado na funcao main().Enderecos de elementos de vetoresNesta secao vamos apenas ressaltar que a notacao&nome_da_variavel[indice]e valida e retorna o endereco do ponto do vetor indexado por indice. Isto seriaequivalente a nome_da_variavel + indice. E interessante notar que, como consequencia, oponteiro nome_da_variavel tem o endereco &nome_da_variavel[0], que indica onde namemoria esta guardado o valor do primeiro elemento do vetor.Vetores de ponteirosPodemos construir vetores de ponteiros como declaramos vetores de qualquer outro tipo.Uma declaracao de um vetor de ponteiros inteiros poderia ser:int *pmatrx [10];No caso acima, pmatrx e um vetor que armazena 10 ponteiros para inteiros.AUTO AVALIACAOVeja como voce esta.Fizemos a funcao StrCpy(). Faca uma funcao StrLen() e StrCat() que funcionem como asfuncoes strlen() e strcat() de string.h respectivamenteInicializando PonteirosPodemos inicializar ponteiros. Vamos ver um caso interessante dessa inicializacao deponteiros com strings.Precisamos, para isto, entender como o C trata as strings constantes. Toda string que oprogramador insere no programa e colocada num banco de strings que o compilador cria. Nolocal onde esta uma string no programa, o compilador coloca o endereco do inicio daquela50string (que esta no banco de strings). E por isto que podemos usar strcpy() do seguintemodo:strcpy (string,"String constante.");strcpy() pede dois parametros do tipo char*. Como o compilador substitui a string"String constante." pelo seu endereco no banco de strings, tudo esta bem para a funcaostrcpy().O que isto tem a ver com a inicializacao de ponteiros? E que, para uma string que vamosusar varias vezes, podemos fazer:char *str1="String constante.";Ai poderiamos, em todo lugar que precisarmos da string, usar a variavel str1. Devemosapenas tomar cuidado ao usar este ponteiro. Se o alterarmos vamos perder a string. Se ousarmos para alterar a string podemos facilmente corromper o banco de strings que ocompilador criou.Mais uma vez fica o aviso: ponteiros sao poderosos mas, se usados com descuido,podem ser uma otima fonte de dores de cabeca.AUTO AVALIACAOVeja como voce esta.Escreva a funcaoint strend(char *s, char *t)que retorna 1 (um) se a cadeia de caracteres t ocorrer no final da cadeia s, e 0 (zero)caso contrario.Ponteiros para PonteirosUm ponteiro para um ponteiro e como se voce anotasse o