Obra: Programar em C++/Vetores
Matéria: Português
Nível: médio
vetores matrizes façamos uma pequena revisão de conceitos vetores matrizes são variáveis compostas homogêneas ou seja são agrupamentos de dados que individualmente ocupam mesmo tamanho na memória são referenciados pelo mesmo nome geralmente são usando se índices vetores distinguem se das matrizes apenas pela característica de ter dimensão ou essencialmente vetores são matrizes linha ou matrizes coluna em linguagem vetores matrizes são usados abundantemente para compor estruturas de dados necessárias para composição de diversos recursos esta usa mais explicitamente vetores de caracteres para definir cadeias de texto que conhecido como mais trivial uso de vetores além deste recurso também define meio de criação de matrizes tipo provendo desta forma os recursos necessários para criação destes conjuntos de dados linguagem suporta os mesmos recursos permite criação de matrizes de objetos uma vez que um objeto essencialmente um tipo de dado criado pelo programador todas as características básicas legadas aos tipos em geral são observados nos tipos criados classes de objetos vetores os vetores em seguem mesma notação da linguagem via de regra declara se tipo seguido de um asterisco para acessar valor apontado pela variável usa se um asterisco de forma semelhante como pode ser visto no trecho de código abaixo int int cout matrizes podemos imaginar que uma matriz um conjunto de vetores que ocupam uma determinada área de memória referenciada por um nome comum matrizes de tipos primitivos são conseguidas através de associações do operador como por exemplo char int definindo nossas classes de objetos poderemos declarar matrizes de objetos class record int float char desc public record void addfdata float float float getfdatax float getfdatay void function record ou seja podemos adotar mesma sintaxe para criar matrizes de objetos este procedimento pode ser usado com cuidado de se avaliar antes quantidade de memória disponível para que matriz não ultrapasse esse limite físico muitas vezes delimitada pelo hardware ou pelo sistema operacional lembremos que um objeto precisa do espaço equivalente soma de suas variáveis internas para ser alocado na memória declarando arranjo os arrays permitem fazer seguinte int equivalente ter int ou seja permite declarar muitas variáveis de uma forma bem simples poupa escrita bastante compreensível número que está dentro de brackets size declarator ele que vai permitir ao computador dizer quantas variáveis serem geradas logo quanta memória deverá ser reservada memória reservada para as variáveis vão ser todas seguidas um int seguir ao outro há uma forma para não dizer valor deste size declarator mas isso apenas acontece antes da compilação ou seja compilador que vai fazer esse preenchimento por nós visualizando nosso código contanto os membros que colocámos isto um automatismo dos compiladores recentes chama se isto iniciação implícita que vamos ver nesta secção as variáveis geradas pelos arrays vão ser todos do mesmo tipo repar
ícita que vamos ver nesta secção as variáveis geradas pelos arrays vão ser todos do mesmo tipo reparem que valor do size declarator um número literal ele não vai mudar quando programa estiver correr por isso quando não soubermos número de elementos que fazemos veja uma tentativa include using namespace std int main int numtests cout numtests int return isto vai dar um erro de compilação porque array está espera de uma constante não uma variável há uma maneira de contornar isto que através da memória dinâmica que vamos dar mais tarde num capitulo próprio pois isto vai envolver muitos conceitos constantes reparem que há uma diferença entre literais constantes apesar de em ambos os casos valor não alterado durante execução do programa constant um nome que representa valor literal valor declarar constantes exatamente como declarar uma variável com duas diferenças declaração começa com palavra const isto vai dizer ao compilador que uma constante não uma variável teremos de atribuir logo valor na declaração ou seja fazer iniciação exemplo const int numtests portanto se tentarmos colocar um outro valor ao numtest isso vai dar um erro de compilação array index composto por de existe posições pergunta porque que índex começa em zero não um ou seja temos as posições que pedimos mas índex começa no zero não no razão disto tem ver com offset que refere ao valor adicionado para endereço base para produzir segunda address bem não entendi bem eu explico de novo endereço address do primeiro elemento do array mesmo do que endereço base do próprio array ah espera aí que estão dizer que endereço do array igual ao do primeiro elemento do array assim valor que teria de ser adicionado ao endereço base do array para conseguirmos endereço do primeiro elemento seria zero agora sim percebi erro um erro comum esquecer que index começa no zero portanto quando se querem referir ao último elemento esquecem se que têm de subtrair uma unidade que advém desse esquecimento que podem estar alterar memória pertencente uma variável instrução de um outro programa ou seja vai existir violação de dados se array for declarado globalmente em vez de ser localmente então cada elemento inicializado ao valor defaut que zero iniciação iniciação se bem se recordam atribuir um valor uma variável ao mesmo tempo que declaramos variável podemos fazer iniciação de um array de maneiras explicit array sizing int testscore float milespergallon char grades string days sunday monday tuesday wednesday thursday friday saturday pergunta que que acontece se dermos mais valores de atribuição do que elementos do array int isto vai dar um erro de compilação too many initializers pergunta que que acontece se tivermos menos valores do que os elementos int não acontece nada simplesmente não temos valores para porém em alguns compiladores os elementos não inicializados ficam com os valores defaut que no caso dos ints no caso dos floats nos caracteres caractere nulo no entanto se não inicializarmos um dos elementos
s no caso dos floats nos caracteres caractere nulo no entanto se não inicializarmos um dos elementos os restantes elementos terão de ser não inicializados pois caso contrário teremos um erro de compilação implicit array sizing int testscore float milespergallon char grades aqui compilador faz trabalho por nós conta os elementos preenche número de elementos caracter array char name char name jeff ambas as inicializações são permitidas porém tomar atenção ultima iniciação quando colocámos as aspas duplas compilador acrescenta na array que cria não tem esta até costuma ser preferida pelos programadores ao estilo de strings na verdade as strings são arrays de char mas vamos falar disso num capitulo próprio char escape sequence para caracterer null este escape sequence sinaliza ao cout fim do character array último elemento do array preenchido se não tivéssemos este carácter apareceriam estranhos caracteres seguir ao jeff chamados caracteres lixo porquê isto não significa que último elemento deva ser sempre null carácter arrays de várias dimensões podemos ter duas dimensões alturalargura como também poderíamos ter infinitas tam tam tamn iniciando float vect int matrx char str char str joao char str_vect joao maria jose peguemos no exemplo int na memória teríamos as coisas assim ou seja os elementos são seguidos do mesmo tipo portanto ter int equivalente ter int nome que se dá que diferente pergunta será pedido espaço par ints ou antes um espaço com tamanho de ints como nós sabemos que os arrays os elementos têm endereços de memoria consecutivos por isso não podem ser pedidos ints pois se fosse esse caso poderia acontecer que eles não ficassem juntos const constant arrays const int daysinmonth recordar que temos de inicializar quando queremos fazer uma constante array atribuir valores ao array include using namespace std int main int testscore cout testscore cout testscore cout testscore cout using namespace std int main int testscore for int testscorei for using namespace std const int max int main int testscoremax for int testscorei for using namespace std const int max int main int testscore cout using namespace std const int max int main int testscoremax for int testscorei for using namespace std void assignvalues int int void displayvalues int int const int max int main int testscoremax assignvalues testscore max displayvalues testscore max return void assignvalues int tests int num for int testsi void displayvalues int scores int elems for int using namespace std void printarray int array int length função com argumentos um deles um array for int include using namespace std void doublethem int int size int main int int myints doublethem myints passei array base for