Você está na página 1de 25

Unidade 2

Seção 2

Algoritmos e Técnicas de
Programação
iStock
Webaula 2
Variáveis com tipos de dados compostos e ponteiros

1
Nesta webaula, veremos as variáveis compostas
homogêneas (vetores e matrizes), e as compostas
heterogêneas (estruturas - struct), bem como o que
são, para que servem e como utilizar as variáveis do
tipo ponteiro.

2 iStock
Como vimos anteriormente, as variáveis são
usadas para armazenar dados na memória de
trabalho, e esses dados podem ser de diferentes
tipos (inteiro, decimal, caractere ou booleano),
chamados de tipos primitivos. Assim, podemos
Mas, para armazenar diversos valores dentro
armazenar a idade de uma pessoa em uma
de um mesmo contexto, é necessário utilizar
variável do tipo int, a altura em um tipo float, etc.
variáveis compostas. Esse recurso permite
armazenar diversos valor em um endereço
de memória.

3
Analogia entre casas, prédios e variáveis
Variáveis Compostas
Variáveis compostas são utilizadas para armazenar
diversos dados em uma única estrutura na
memória, por isso também são chamadas de
estrutura de dados. As variáveis compostas
possuem índices que as diferenciam, portanto,
uma variável composta possui um endereço na Fonte: elaborada pela autora.

memória e índices para identificar seus


subespaços.
A seguir, veja uma analogia entre casas, prédios e
variáveis para entender variáveis compostas.

4
Variáveis compostas homogêneas unidimensionais - Vetores
As variáveis compostas homogêneas Cada elemento no vetor é acessado por meio do
unidimensionais armazenam o mesmo tipo de seu índice, que sempre começará pelo valor zero,
valor e possuem a estrutura de uma tabela independentemente da linguagem de
contendo apenas 1 linha e N colunas, programação. O valor do vetor depende da
respectivamente. posição, ou seja, do índice.

Clique e veja um exemplo de vetor.

5
Criação de dois vetores em C para armazenar a idade e a
Criação de um vetor altura de 3 pessoas

A criação de um vetor é similar a uma variável


primitiva, tendo que acrescentar apenas um
número entre colchetes, indicando qual será o
tamanho desse vetor (quantidade de blocos).
Portanto, a sintaxe ficará da seguinte forma: Fonte: elaborado pela autora.

<tipo> <nome_do_vetor>[tamanho];
Observações na criação de vetor.

6
Para guardar um valor digitado pelo usuário em um
vetor usamos a função scanf(), porém, na variável
deverá ser especificado em qual posição do vetor se
deseja guardar.
Exemplo:
printf("Digite uma idade: ");
scanf("%d",&idade[1]);

7 iStock
Vetor de caracteres (string)
No mundo da programação, um vetor de
caracteres é chamado de string.
A declaração de uma string em C é feita da
seguinte forma: Ao se criar uma string em C, temos que
char <variavel>[tamanho]; atentar ao seu tamanho, pois a última
Exemplos: posição da string é reservada pelo
compilador, que atribui o valor “\0” para
char nome[16];
indicar o final da sequência. Portanto, a
char sobrenome[31];
string nome[16] possui 15 “espaços”
char frase[101];
disponíveis para serem preenchidos.

8
A atribuição de valores à string pode ser feita no momento da declaração, de três formas.
Exemplos:
char nome[16]={'J','o','a','o'};
char sobrenome[31] = "Alberto Gomes";
char frase[101] = {"Disciplina de Algoritmos"};

9
Para fazer a leitura e impressão de strings em C, pode-se utilizar a função scanf(), mas utilizando o
especificador de formato %s para indicar que será armazenada uma string. Portanto, para armazenar o nome
digitado por um usuário usamos:
char nome[16];
printf("\n Digite um nome:");
scanf("%s",nome);
printf("\n Nome digitado: %s",nome);

10
Exemplo de atribuição do vetor de caractere
Essa forma de atribuição possui uma limitação: só
é possível armazenar palavras simples, compostas
não. Isso porque a função scanf() interrompe a
atribuição quando encontra um espaço em
branco. Para contornar essa limitação, uma opção
é usar a função fgets(), que também faz parte
do pacote padrão <stdio.h>. Essa função Fonte: elaborado pela autora.

possui a seguinte sintaxe:


fgets(destino,tamanho,fluxo);
Observações do exemplo.

11
Variáveis compostas homogêneas
bidimensionas - Matrizes
As variáveis compostas homogêneas
bidimensionais armazenam o mesmo tipo de valor
e possuem a estrutura de uma tabela contendo M
linhas e N colunas, respectivamente.

Fonte: elaborada pela autora.

12
Criação de uma matriz
Para criarmos uma matriz em C, usamos a seguinte sintaxe:
<tipo> <nome_da_matriz>[linhas][colunas];
A criação e manipulação de matrizes bidimensionais exige a especificação de dois índices, portanto a atribuição
de valores deve ser feita da seguinte forma:
matriz[M][N] = valor;
Clique para ver exemplos.
Em que M representa a linha que se pretende armazenar e N a coluna. Assim como nos vetores, na matriz os
índices sempre iniciarão em zero.

13
Matriz em C para armazenar as notas do primeiro e
segundo bimestre de três alunos.

Na linha 3, foi criada uma matriz chamada notas,


com 3 linhas e 2 colunas, isso significa que serão
armazenados 6 valores (linhas x colunas).
Nas linhas 4 e 5, foram armazenadas as notas do
primeiro aluno. A linha não se altera (primeiro
índice), já a coluna se altera (segundo índice).
O mesmo acontece para o segundo e terceiro
aluno, que são armazenados respectivamente na
segunda e terceira linha.

Fonte: elaborado pela autora.

14
Para armazenar valores digitados pelo usuário em uma matriz, usa-se a função scanf(), indicando os dois
índices para selecionar a posição que se deseja guardar. Para impressão de valores, também deve-se selecionar a
posição por meio dos dois índices.
Exemplo:
1. printf("Digite uma nota: ");
2. scanf("%f",&nota[1][0]);
3. printf("Nota digitada: %.2f",nota[1][0]);
Nesse exemplo, a nota digitada será guardada na linha 1 e coluna 0 e será exibida na tela, usando duas casas
decimais (comando linha 3).

15
Variáveis compostas heterogêneas Na linguagem C, a criação de uma estrutura deve
- Structs ser feita antes da função main() e deve possuir a
seguinte sintaxe:
Além das estruturas homogêneas, as linguagens
struct <nome>{
de programação oferecem um tipo de variável
composta heterogênea, chamada de estruturas <tipo>
(structs). Ela pode armazenar diferentes tipos de <tipo> <nome_da_variavel1>;
valores.
<tipo>
<tipo> <nome_da_variavel2>;
...
};

16
Estrutura em C para armazenar o modelo, o ano e o valor
de um automóvel.

Nas linhas 2 a 6, foi criada a estrutura


“automovel”.
Para utilizar essa estrutura, foi criada, na linha 8, a
variável “dadosAutomovel1”, que é do tipo struct
automovel. Somente após essas especificações é
que pode-se atribuir algum dado.

Fonte: elaborado pela autora.

17
O acesso aos dados da struct (leitura e escrita)
é feito usando o nome da variável que recebeu
como tipo a estrutura com um ponto (.) e o nome
do campo: variavel.campo. Por exemplo, para
acessar o campo ano da struct automovel,
deve-se escrever: dadosAutomovel1.ano.
Clique na imagem para visualizar a
implementação completa para guardar valores
digitados pelo usuário na estrutura “automovel”
e depois imprimi-los.

Fonte: elaborada pela autora.

18
Variável do tipo ponteiro

Além das variáveis primitivas e compostas, existe Variáveis do tipo ponteiro são usadas
um tipo de variável muito especial na linguagem exclusivamente para armazenar endereços de
C, chamada de ponteiro. memória. O acesso à memória é feito usando dois
operadores: o asterisco (*), usado para criação do
Por meio dos ponteiros, é possível manipular ponteiro, e o &, que é usado para acessar o
variáveis e outros recursos pelo endereço de endereço da memória, por isso chamado de
memória. operador de referência.

Clique aqui para saber mais A sintaxe para criar um ponteiro tem como
padrão:

<tipo> *<nome_do_ponteiro>;

Exemplo: int *idade;

19
A criação de um ponteiro só faz sentido se for Na linha 1, foi criada uma variável primitiva inteira
associado a algum endereço de memória. Para com valor 2018, e, na linha 2, foi associado um
isso, usa-se a seguinte sintaxe: ponteiro chamado ponteiro_para_ano ao
endereço da variável primitiva ano. Agora, tudo
1. int ano = 2018; que estiver atribuído à variável ano também estará
2. int *ponteiro_para_ano = &ano; ao ponteiro.

Clique aqui para ver o exemplo ilustrado. Assim, o conteúdo do ponteiro é o endereço da
variável a que ele aponta, e o ponteiro também
ocupa espaço na memória.

20
Podemos imprimir o conteúdo do ponteiro, que será o endereço da variável a que ele aponta. Utilizando o
ponteiro criado anteriormente (ponteiro_para_ano), temos as seguintes sintaxes:
printf("\n Conteudo do ponteiro: %p",ponteiro_para_ano);
O especificador de formato %p é usado para imprimir o endereço de memória, armazenado em um ponteiro.
printf("\n Conteudo da variavel pelo ponteiro: %d",*ponteiro_para_ano);
Acessar o conteúdo da variável que o ponteiro aponta.
printf("\n Endereco do ponteiro: %p",&ponteiro_para_ano);
Imprimir o endereço do próprio ponteiro.

21
Nesta webaula foram apresentadas as variáveis
compostas homogêneas (vetores e matrizes), bem
como as compostas heterogêneas (estruturas -
struct). Além disso, apresentamos as variáveis do tipo
ponteiro, conceito importantíssimo para a disciplina
de estruturas de dados.

22 iStock
23
Bons estudos!
24

Você também pode gostar