exemplo, um modo maiscompacto de inicializar uma string. O quinto exemplo combina as duas tecnicas para inicializarum vetor de strings. Repare que devemos incluir o ; no final da inicializacao.Inicializacao sem especificacao de tamanhoPodemos, em alguns casos, inicializar matrizes das quais nao sabemos o tamanho apriori. O compilador C vai, neste caso verificar o tamanho do que voce declarou e considerarcomo sendo o tamanho da matriz. Isto ocorre na hora da compilacao e nao podera mais ser41mudado durante o programa, sendo muito util, por exemplo, quando vamos inicializar umastring e nao queremos contar quantos caracteres serao necessarios. Alguns exemplos:char mess [] = "Linguagem C: flexibilidade e poder.";int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 };No primeiro exemplo, a string mess tera tamanho 36. Repare que o artificio para realizara inicializacao sem especificacao de tamanho e nao especificar o tamanho! No segundoexemplo o valor nao especificado sera 5.AUTO AVALIACAOVeja como voce esta.O que imprime o programa a seguir? Tente entende-lo e responder. A seguir, execute-o ecomprove o resultado.# include <stdio.h>int main(){int t, i, M[3][4];for (t=0; t<3; ++t)for (i=0; i<4; ++i)M[t][i] = (t*4)+i+1;for (t=0; t<3; ++t){for (i=0; i<4; ++i)printf ("%3d ", M[t][i]);printf ("\n");}return(0);}42Capitulo . 5 (PONTEIROS)Como Funcionam os PonteirosOs ints guardam inteiros. Os floats guardam numeros de ponto flutuante. Os chars guardamcaracteres. Ponteiros guardam enderecos de memoria. Quando voce anota o endereco de um colegavoce esta criando um ponteiro. O ponteiro e este seu pedaco de papel. Ele tem anotado um endereco.Qual e o sentido disto? Simples. Quando voce anota o endereco de um colega, depois voce vai usareste endereco para acha-lo. O C funciona assim. Voce anota o endereco de algo numa variavelponteiro para depois usar.Da mesma maneira, uma agenda, onde sao guardados enderecos de varios amigos, poderia servista como sendo uma matriz de ponteiros no C.Um ponteiro tambem tem tipo. Veja: quando voce anota um endereco de um amigo voce otrata diferente de quando voce anota o endereco de uma firma. Apesar de o endereco dos dois locaister o mesmo formato (rua, numero, bairro, cidade, etc.) eles indicam locais cujos conteudos saodiferentes. Entao os dois enderecos sao ponteiros de tipos diferentes.No C quando declaramos ponteiros nos informamos ao compilador para que tipo de variavelvamos aponta-lo. Um ponteiro int aponta para um inteiro, isto e, guarda o endereco de um inteiro.Declarando e Utilizando PonteirosPara declarar um ponteiro temos a seguinte forma geral:tipo_do_ponteiro *nome_da_variavel;E o asterisco (*) que faz o compilador saber que aquela variavel nao vai guardar umvalor mas sim um endereco para aquele tipo especificado. Vamos ver exemplos dedeclaracoes:int *pt;char *temp,*pt2;O primeiro exemplo declara um ponteiro para um inteiro. O segundo declara doisponteiros para caracteres. Eles ainda nao foram inicializados (como toda variavel do C que e43apenas declarada). Isto significa que eles apontam para um lugar indefinido. Este lugar podeestar, por exemplo, na porcao da memoria reservada ao sistema operacional do computador.Usar o ponteiro nestas circunstanicias pode levar a um travamento do micro, ou a algo pior. Oponteiro deve ser inicializado (apontado para algum lugar conhecido) antes de ser usado! Istoe de suma importancia!Para atribuir um valor a um ponteiro recem-criado poderiamos iguala-lo a