Olá, seja bem-vindo de volta. Vamos continuar nossa discussão sobre estruturas
e falar sobre como elas estão relacionadas aos arrays.
Falamos sobre como as estruturas são semelhantes aos arrays e que você pode armazenar mais de
um valor, mas eles são diferentes porque você pode ter diferentes tipos de dados
e pode agrupá-los dessa forma.
Mas você também pode ter matrizes de estruturas semelhantes.
Você viu como a estrutura é útil e permite agrupar elementos relacionados
de forma lógica. Sabemos definir uma estrutura
com diferentes elementos usando a palavra-chave struct, usando um nome
de tag.
E também sabemos como criar uma variável desse tipo.
Porque o que uma estrutura é essencialmente é um novo tipo de dados que você pode usar.
E então você pode acessar os elementos de uma estrutura usando o operador de seleção de membro.
Bem, e se você quiser criar várias estruturas dentro
de um array. Você pode fazer isso.
Então, por exemplo, é necessário controlar apenas uma variável em vez de três
para cada data usada pelo programa, essa é a vantagem de uma estrutura.
Se quiséssemos lidar com 10 datas diferentes em um
programa, teríamos apenas que controlar 10 variáveis diferentes em vez de 30.
Porque lembre-se, a estrutura contém três variáveis dentro de si mesma.
10 para variáveis diferentes ainda é muito, então realmente não
é o caminho ideal a seguir. Você provavelmente deseja criar uma matriz.
Porque você teria 10 tipos iguais da mesma forma que teria
10 ints iguais. Haveria apenas um tipo de estrutura.
Portanto, um método melhor para lidar com as
10 datas diferentes envolve a combinação de dois recursos poderosos da linguagem de programação
c, estruturas e matrizes.
Você pode usá-los juntos para torná-lo ainda mais poderoso.
Portanto, é perfeitamente válido definir um array de estruturas O
conceito de um array de estruturas é muito poderoso e importante em c, então preste muita atenção.
Declarar um array de estruturas é como declarar qualquer outro tipo de array.
Você especifica o tipo, mas acontece que é um tipo de estrutura.
Então, se você quiser criar um array de estruturas que
são nomeadas data, você diria struct
date e depois o nome da variável e então usa os
colchetes, assim como usa os colchetes para outros arrays, você tem que especificar o tamanho.
Portanto, neste caso, se estivermos criando 10 instâncias ou 10 elementos do tipo de
estrutura de data, diríamos 10 dentro desses colchetes para o sinal.
Portanto, isso definiria uma matriz chamada minhas datas, que consiste em 10 elementos.
Cada elemento dentro da matriz é definido como uma data de estrutura do
tipo bf, que contém três membros.
Então, essencialmente, o que você está fazendo é armazenar 30
conjuntos diferentes de dados, 30 elementos de dados diferentes.
Para identificar membros de uma matriz de
estruturas, você aplica a mesma regra usada para estruturas individuais.
Você arquiva o nome da estrutura com o operador ponto e, a seguir, com o nome do membro.
Fazer referência a um elemento de estrutura específico dentro da matriz é bastante natural.
Para definir a segunda data dentro da matriz minhas datas como 8 de agosto de 1986, tudo
o que você precisa fazer é especificar o nome da matriz,
minhas datas e especificar o índice. Estamos especificando aqui a segunda data.
Lembre-se de que as matrizes são baseadas em 0. Então, dizemos 1, sub-1.
E então, se quisermos acessar elementos desse elemento
da matriz ou membros dessa estrutura para esse elemento, dizemos ponto mês.
Portanto, isso nos dará o segundo elemento na matriz minhas datas.
O valor do mês para esse tipo de estrutura, e aqui vamos atribuir a ele o valor 8.
e se quisermos acessar o dia, também vamos atribuir o dia
8 porque é 8 de agosto. E, finalmente, para o ano, diríamos que
ano ponto é igual a 1986.
É assim que você pode atribuir ao segundo elemento da matriz minhas datas,
as três variáveis diferentes, porque é do tipo struct, data struct.
Você deve notar que realmente não é diferente.
A única diferença aqui é que você tem um ponto. Normalmente, você diria apenas minhas datas
sub-1 e isso seria tudo porque você só poderia atribuir uma variável, dependendo
do tipo dessa matriz.
Mas, neste caso, você pode dizer sub-1 com três variáveis diferentes porque
esses são os três elementos dentro da estrutura.
Inicializando uma série de estruturas.
A inicialização de matrizes contendo estruturas é semelhante à inicialização
de matrizes multidimensionais.
Lembre-se, com matrizes multidimensionais, seguiríamos a sintaxe específica com
chaves na parte externa e, em seguida, chaves na parte interna representando cada linha.
As chaves na parte interna eram na verdade opcionais,
mas o tornavam muito mais legível. E então eu gosto de seguir essa convenção.
Neste exemplo, estamos criando uma data my de estrutura de tipo,
ela terá tamanho 5. E então vamos inicializar apenas os três primeiros elementos.
Assim como uma matriz multidimensional, temos
essas chaves dentro. E assim, o primeiro elemento na matriz de minhas
datas, que é um índice abaixo de zero. Diremos que o mês
é 12, a data é 10 e o ano é 1975.
E então faremos o mesmo para o primeiro elemento. Vamos dizer 12 30 1980.
E para o terceiro elemento, diremos 11 15 2005.
E como não fornecemos os outros dois elementos
na matriz my date, eles não serão inicializados em nada.
Portanto, isso definirá as três primeiras datas.
Na matriz, minha data é 12 10
1975, 12 30 1980 e 11 15 2005.
Os pontos internos das chaves são opcionais, assim como em uma área multidimensional, eles também são opcionais.
Mas novamente torna mais fácil de ler, mais fácil de seguir com as chaves
internas, eu seguiria essa convenção.
Você poderia fazer isso se quiser
se livrar das chaves, mas é um pouco mais difícil de
seguir porque agora você só tem vírgulas separadas por vírgulas ou elementos separados por vírgulas
e pode ficar muito confuso se você estiver fazendo muito daqueles.
Você tem que mapear isso corretamente, digamos que estou no quarto
quarto elemento para minha quarta vírgula ok, esse será
o segundo elemento da matriz, é mais difícil de seguir, então use-as entre chaves.
Se você deseja inicializar apenas o terceiro elemento da matriz com um
valor especificado, você pode especificar minhas datas sub-5.
Você ainda está criando a matriz aqui.
Você ainda está declarando a variável e definindo o tamanho para cinco.
Mas dentro das chaves,
você está dizendo dois colchetes e
vai inicializar 2 a 12 10 1975.
Você verá os colchetes que representam o elemento que deseja inicializar, o
operador de atribuição é igual e, dentro das chaves, você
está inicializando o mês, dia e ano para os
elementos dentro da estrutura.
Portanto, você também pode especificar exatamente qual elemento deseja inicializar.
Se você deseja apenas definir o mês e o dia, o segundo elemento da matriz my date para 12 e
30, pode fazer algo muito semelhante.
Você acabou de fazer uma vírgula para separar cada atributo.
Você não quer realmente definir o ano, então você deseja poder usar essas chaves.
Você poderia dizer que ponto mês é
igual a 12 sub-1 ponto dia é igual a 30.
E, novamente, essa sintaxe é muito semelhante à inicialização de variáveis
de estrutura em outro lugar.
A única diferença aqui é porque é um array, você tem que especificar o índice
do array, mas sintaxe semelhante.
E as estruturas que contêm arrays.
Elementos dentro da estrutura que contêm uma matriz.
Também é possível encontrar estruturas que contêm uma matriz como membro.
Isso pode ser útil.
É o uso mais comum para configurar um array de caracteres dentro de uma estrutura.
Usamos arrays char bastante adequados para strings.
Portanto, seria muito comum que uma estrutura contivesse essencialmente uma string, um
array de caracteres.
Então, suponha que você queira definir uma estrutura chamada
mês que contém, como seus membros, o número de dias do mês,
bem como uma abreviação de três caracteres para o nome do mês.
Bem, é aí que podemos usar uma matriz de caracteres. Poderíamos dizer o mês da estrutura.
Sabemos definir uma estrutura. Novamente, isso não está alocando nenhuma memória.
É assim que a estrutura é definida. Esses são os elementos que estão contidos nele.
Aqui, estamos usando a palavra-chave struct. Dizemos o nome da estrutura. O nome da tag é mês,
e então temos aquela chave esquerda e então especificamos os elementos.
Temos um elemento que é inteiro representa o número de dias que temos um ponto-e-vírgula no final.
E então temos uma matriz de caracteres, nome de
caractere sub-três, portanto, tamanho de três porque tem três caracteres.
E então terminamos a estrutura com a chave direita no ponto e vírgula.
Mas lembre-se, os personagens são matrizes e eles estão intimamente relacionados aos ponteiros também, nós sabemos disso agora.
Mas você pode facilmente fazer com que as estruturas contenham matrizes apenas colocando-as
como um elemento membro.
E então isso configura uma estrutura de mês que
contém um membro inteiro chamado número de dias e um membro de caractere chamado nome.
O nome do membro é, na verdade, uma matriz de três caracteres, bastante simples.
Então, como você realmente acessa isso. Bem, primeiro você teria que criar sua variável.
A variável criaria memória para os elementos dentro da estrutura e então você desejaria apenas
definir os campos apropriados dentro da variável de 8 meses, o array de
caracteres, porque esse era o nome dele. Tínhamos nome e número
de dias. Aqui é chamado de nome e o exemplo é chamado de mês.
Bem, um mês é o tipo de variável e nome é o tipo de elemento, então está correto.
Portanto, aqui criamos uma estrutura. É do tipo mês.
É o nome da variável é um mês. Não o inicializamos com nada.
Definimos imediatamente um número de dias de 31 meses.
Usamos aquele operador de seleção de membro de ponto.
E então queremos atribuir ao array de caracteres, não podemos
atribuir diretamente a um array de caracteres.
Você teria que fazer uma comparação de str ou algo assim se quisesse assinar tudo. E você poderia fazer isso.
Você não precisa usar esses índices. Você poderia dizer str copy
a month ponto name vírgula e então j a
n entre aspas duplas ou você poderia fazer isso onde você acessa os elementos
do array por meio do índice.
Aqui estamos dizendo um nome de ponto de mês porque temos que acessar a
variável de membro name ou elemento de membro.
E então, dentro dos colchetes, especificamos o índice do array.
Nós o encontraremos assinando o primeiro caractere no array de j, o segundo a, o terceiro n.
Você veria essa sintaxe se estivesse fazendo ints,
doubles e floats. Normalmente, quando você tem uma
matriz de caracteres, você usa a função de cópia str stir e atribui tudo com aspas duplas.
Você também pode inicializar a variável com os mesmos valores, fazendo
algo muito semelhante ao declarar a variável. Apenas dentro das chaves, porque
é uma matriz, você pode ter chaves
internas e as aspas simples ao redor de cada caractere.
E você pode configurar estruturas de 12 meses dentro de uma matriz para representar cada mês do ano.
Portanto, agora podemos criar a
variável de um mês, que é um array de tamanho 12 do tipo struct month,
e que pode representar cada mês.
E então, para cada mês, podemos gastar o número de dias e as abreviações do mês.
Portanto, utilizar esses dois conceitos poderosos de matrizes
e estruturas é muito, muito útil.
As estruturas podem ter muitos elementos,
portanto, podem ser na verdade uma estrutura de arrays e os
elementos dentro da estrutura podem ser um array.
E vamos falar a seguir sobre como podemos usar estruturas para conter outros elementos, como ponteiros.
Mas você verá que as estruturas podem armazenar qualquer tipo de
dados em muitos tipos diferentes de dados.
E é muito útil usar com o conceito de array.
Eu espero que isso tenha sido útil. Novamente, teremos o desafio de demonstrar
alguns desses conceitos e apresentar alguns exemplos dentro
dos blocos de código posteriormente. Obrigada.