Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
5
Criação de dois vetores em C para armazenar a idade e a
Criação de um vetor altura de 3 pessoas
<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.
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.
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.
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",¬a[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.
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.
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>;
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