DISCIPLINA DE LINGUAGEM DE
PROGRAMAÇÃO
LINGUAGEM C
Professor Airton Kuada
Email - [email protected]
QUESTÕES PRELIMINARES
LINGUAGEM DE PROGRAMAÇÃO.
É UMA FORMA DE TRANSFERIR O CONHECIMENTO
HUMANO PARA O COMPUTADOR SEM CONHECER A
LINGUAGEM NATIVA DO COMPUTADOR.
 EXISTEM DIVERSAS LINGUAGENS DE PROGRAMAÇÃO:
- BASIC
- COBOL
- FORTRAN
- ASSEMBLER
- PASCAL
-C
QUESTÕES PRELIMINARES
 O COMPUTADOR CONHECE APENAS A LINGUAGEM
BINÁRIA COMO POR EXEMPLO 01010100011100110011001
 É NECESSÁRIO TRADUZIR OS COMANDOS CONHECIDOS
PELO HOMEM PARA UMA FORMA QUE O COMPUTADOR
ENTENDA: Imprima (“Bom final de semana a todos”)
 EXISTEM DIFERENTES FORMAS DE EXPRESSAR O
COMANDO ACIMA E VARIA CONFORME A LINGUAGEM DE
PROGRAMAÇÃO QUE ESTÁ SENDO UTILIZADA
printf (“Bom final de semana a todos”) - C
writeln (‘Bom final de semana a todos”) - PASCAL
display “Bom final de semana a todos” - COBOL
print “Bom final de semana a todos” - BASIC
QUESTÕES PRELIMINARES
 TODAS AS INSTRUÇOES ANTERIORES SÃO TRADUZIDAS
PARA UM MESMO FORMATO FINAL.
 UM PROGRAMA É ESCRITO UTILIZANDO UMA FORMA QUE
É DEFINIDOS PELA LINGUAGEM DE PROGRAMAÇÃO
 UM PROGRAMA É ESCRITO UTILIZANDO-SE UMA EDITOR
DE TEXTO
 UM PROGRAMA ESCRITO EM UMA LINGUAGEM DE
PROGRAMAÇÃO É CHAMADO DE PROGRAMA FONTE.
QUESTÕES PRELIMINARES
 EXEMPLO DE UM PROGRAMA FONTE EM LIGUAGEM
#include <stdio.h>
main ()
{
printf (“Bom final de semana a todos\n”);
}
C.
QUESTÕES PRELIMINARES
 UM PROGRAMA FONTE AINDA NÃO É ENTENDIDO PELO
COMPUTADOR
 É NECESSÁRIO CONVERTER ESTE PROGRAMA PARA A
LINGUAGEM DO COMPUTADOR (BINÁRIO)
 ESTE PROCESSO É CHAMADO DE GERAÇÃO DE PROGRAMA
EXECUTÁVEL
 A GERAÇÃO É COMPOSTA POR DUAS FASES:
- COMPILAÇÃO;
- LINKEDIÇÃO;
QUESTÕES PRELIMINARES
 A FERRAMENTA QUE REALIZA A COMPILAÇÃO É CHAMADO
DE COMPILADOR E GERA UM CODIGO INTERMEDIÁRIO
CHAMADO DE CÓDIGO OBJETO
 A FERRAMENTA QUE GERA O PROGRAMA EXECUTÁVEL
FINAL A PARTIR DO CODIGO OBJETO É CHAMADO DE
LINKEDITOR
 EXISTEM DIVERSOS FABRICANTES DE COMPILADORES (OS
MAIS CONHECIDOS) :
- MICROSOFT
- BORLAND
QUESTÕES PRELIMINARES
LINGUAGEM C - HISTÓRICO
 NASCEU NO INÍCIO DA DÉCADA DE 1970 NOS
LABORATÓRIO DA AT&T BELL A PARTIR DE UMA LINGUAGEM
CHAMADA DE B(CPL) DE BELL
 TEM UMA LIGAÇÃO MUITO ESTREITA COM O SISTEMA
OPERACIONAL UNIX
 1978 BRIAN KERNIGHAN E DENNIS RITCHIE ESCREVERAM
O LIVRO THE C LANGUAGE PROGRAMMING
 MUITAS VERSÕES FORAM CRIADAS
 1983 UM COMITÊ COMEÇOU A TRABALHAR NA CRIAÇÃO
DE UM PADRÃO (ANSI C)
LINGUAGEM C CARACTERÍSTICAS
 LINGUEM DE NÍVEL MÉDIO
 PORTABILIDADE
 PADRONIZADA
 LINGUAGEM ESTRUTURA
LINGUAGEM C - APLICAÇÕES
A LINGUAGEM C PODE UTILIZADA EM DIVERSOS CAMPOS DE
DESENVOLVIMENTO:
 SISTEMAS OPERACIONAIS
 GERENCIADORES DE BD
 EDITORES DE TEXTO
 PLANILHAS ELETRÔNICAS
 COMPILADORES
 SISTEMAS DE NEGÓCIOS (FOLHA, CONTAB, ESTOQUE, ETC).
LINGUAGEM C - ESTRUTURA
BÁSICA
#include <stdio.h>
main ()
{
commandos;
}
OBSERVAÇÕES IMPORTANTES:
 A LINGUAGEM C TRABALHA SEMPRE COM LETRAS
MINÚSCULAS
 C É CASE-SENSITIVE, ISTO É FAZ DIFERENCIAÇÃO ENTRE
MAÍUSCULA E MINÚSCULA. EX: BOM É DIFERENTE DE Bom E
É DIFERENTE DE bom
LINGUAGEM C
DESCRIÇÃO DA ESTRUTURA
A LINHA #include <stdio.h> INDICA A INCLUSÃO DE UM
SEGUNDO ARQUIVO FONTE NO ARQUIVO FONTE ATUAL,
SEMELHANTE AO ATO DE COPIAR E COLAR.
A LINHA main(), ESPECIFÍCA O NOME DA FUNÇÃO. TODOS OS
PROGRAMAS EM C INICIAM SUA EXECUÇÃO CHAMANDO A
FUNÇÃO main(), DESTA FORMA, A FUNÇÃO TEM QUE ESTAR
SEMPRE PRESENTE (INICIO DO PROGRAMA)
A LINHA { SIGNIFICA O INICIO DA FUNÇÃO MAIN E TAMBÉM
INDICA O INÍCIO DE UM BLOCO DE COMANDO
A LINHA } SIGNIFICA O FINAL DA FUNÇÃO MAIN E TAMBÉ
INDICA A FINALIZAÇÃO DE UM BLOCO DE COMANDO
comandos INDICA COMANDOS DA LINGUAGEM C QUE PODEM
SER UTILIZADOS NO CORPO DA FUNÇÃO main()
LINGUAGEM C
COMANDOS DE ENTRADA E SAÍDA
#include <stdio.h>
main()
{
int valorint;
printf (“Entre com o valor da variável “);
scanf (“%d”, &valorint);
printf (“O valor que você digitou foi %d\n”, valorint );
}
LINGUAGEM C
DESCRIÇÃO DE printf E scanf
NO PROGRAMA ANTERIOR, FOI DECLARADA UMA VARÍAVEL
CHAMADA variavel DO TIPO int QUE REFERE-SE A UM INTEIRO
(VISTO ADIANTE)
A LINHA printf (“Entre com o valor da variável “); IRÁ MOSTRAR A
EXPRESSÃO QUE ESTÁ ENTRE ASPAS
A LINHA scanf (“%d”, &valorint); IRÁ LER DO TECLADO UM
VALOR INTEIRO QUE SERÁ ARMAZENADO NA VARIÁVEL
valorint
A LINHA printf (“O valor que você digitou foi %d\n”, valorint ); IRÁ
MOSTRAR O CONTEÚDO A EXPRESSÃO QUE ESTÁ ENTRE
ASPAS E O LOCAL QUE POSSUI %d, SERÁ SUBSTITUIDO PELO
CONTEÚDO DA VARIÁVEL valorint. O \n IRÁ GERAR UM CRLF
(NOVA LINHA) APÓS O FINAL DA MENSAGEM
LINGUAGEM C
FUNÇÃO
UMA FUNÇÃO É UM BLOCO DE COMANDOS QUE EXECUTA
UMA ÚNICA FUNÇÃO, SEMELHANTE AS FUNÇÕES DE UMA
CALCULADORA
EXEMPLO DE FUNÇOES:
RAIZ QUADRADA - SQRT
 ORDENAÇÃO - SORT
 LOGARÍTMO - LOG
LINGUAGEM C
FORMA GERAL DE UMA FUNÇÃO
nome-da-função (declarações dos parâmetros)
{
comandos;
}
COMO PODEMOS VER, A ESTRUTURA É BEM SEMELHANTE A
ESTRUTURA DE UM PROGRAMA EM C.
NA VERDADE O main () É A FUNÇÃO PRINCIPAL DO
PROGRAMA.
ASSIM, SEMPRE IRÁ EXISTIR PELO MENOS UMA FUNÇÃO EM
UM PROGRAMA EM C, ISTO É, A FUNÇÃO main().
LINGUAGEM C
FUNÇÃO - EXEMPLO
#include <stdio.h>
main ()
{
soma ();
}
soma ()
{
int a, b, c;
a = 10;
b = 10;
c = a + b;
printf (“O valor da soma foi %d\n”, c);
}
LINGUAGEM C
FUNÇÃO - ARGUMENTOS
ARGUMENTOS DE UMA FUNÇÃO É SIMPLESMENTE UM
VALOR QUE É PASSADO PARA A FUNÇÃO NA HORA EM QUE
ELA É CHAMADA.
A FUNÇÃO ANTERIOR soma() NÃO NECESSITA DE NENHUM
ARGUMENTO DURANTE A SUA CHAMADA, A FUNÇÃO printf E
scanf, NECESSITAM DE ARGUMENTOS NA HORA DE SUA
CHAMADA.
LINGUAGEM C
PARÂMETROS x ARGUMENTOS
 ARGUMENTOS REFERE-SE AO VALOR QUE É USADO PARA
CHAMAR UMA FUNÇÃO.
 PARÂMETROS REFERE-SE À VARIÁVEL EM UMA FUNÇÃO QUE
RECEBE O VALOR DOS ARGUMENTOS USADOS NA CHAMADA DA
FUNÇÃO
É IMPORTANTE QUE DEVE FICAR CLARO QUE, A VARIÁVEL
USADA COMO ARGUMENTO NA CHAMADA DE UMA FUNÇÃO
NÃO TEM NADA A VER COM O PARÂMETRO QUE RECEBE O
VALOR DESTA VARIÁVEL.
FUNÇÕES QUE ACEITAM ARGUMENTOS SÃO CHAMADAS DE
FUNÇÕES PARAMETRIZADAS E POSSUEM UM
COMPORTAMENTO DINÂMICO
LINGUAGEM C
FUNÇÃO PARAMETRIZADA
#include <stdio.h>
main ()
{
int a = 10, b=20, c;
soma (a, b);
printf (“O valor da soma é %d \n”, c );
}
soma (int x,int y )
{
int z;
z = x + y;
printf (“O valor da soma foi %d\n”, z );
}
LINGUAGEM C
FUNÇÃO-RETORNO DE VALOR
UMA FUNÇÃO PODE RETORNAR ALGUM VALOR PARA A
FUNÇÃO CHAMADORA, ESTE VALOR É CHAMADO DE VALOR
DE RETORNO DA FUNÇÃO.
LINGUAGEM C
FUNÇÃO-RETORNO DE VALOR
#include <stdio.h>
main ()
{
int resultado;
resultado = soma (10, 20);
printf (“o resultado final é %d\n”, resultado );
}
soma (int a, int b)
{
int c;
c = a + b;
return ( c );
}
LINGUAGEM C
FUNÇÃO-RETORNO DE VALOR
NESSE EXEMPLO, A FUNÇÃO SOMA DEVOLVE O RESULTADO
DE a + b QUE ESTÁ ARMAZENADO EM c USANDO O COMANDO
return.
O PROGRAMA ENTÃO ATRIBUI ESSE VALOR PARA A VARIÁVEL
resultado, ISTO É, O VALOR DEVOLVIDO PELO COMANDO return
SE TORNA O VALOR DE soma () NA ROTINA CHAMADA.
NO EXEMPLO, O VALOR DE RETORNO É DO TIPO int, MAS
FUNÇÕES PODEM DEVOLVER OUTROS TIPOS DE DADOS. POR
DEFAULT UMA FUNÇÃO DEVOLVE SEMPRE UM VALOR DO
TIPO int
É POSSÍVEL UTILIZAR O COMANDO return SEM NENHUM
VALOR LIGADO A ELA.
LINGUAGEM C
COMANDOS INICIAIS - if
O COMANDO if AVALIA SE UMA EXPRESSÃO LÓGICA É
VERDADEIRA OU FALSA.
A FORMA MAIS SIMPLES DO COMANDO if é
if ( condição )
comando;
EXEMPLO:
if (a < b )
printf (“A e menor que B );
LINGUAGEM C
COMANDOS INICIAIS - if
OPERADORES DE COMPARAÇÃO
< - MENOR QUE
> - MAIOR QUE
<= - MENOR OU IGUAL QUE
>= MENOR OU IGUAL QUE
== IGUAL QUE
!=
DIFERENTE DE
A ANALISE DAS EXPRESSÕES LÓGICAS SEMPRE RESULTAM
EM UM VALOR 0 OU 1;
LINGUAGEM C
COMANDOS INICIAIS - for
COMANDO DE LOOP (REPETIÇÃO)
A FORMA MAIS SIMPLES DO COMANDO for É
for (inicialização, condição, incremento)
comando;
 inicialização AJUSTA A VARIÁVEL DE CONTROLE DO LOOP
PARA UM VALOR INICIAL
 A condição É TESTADO TODA VEZ QUE O LOOP SE REPETE, SE
A condição FOR VERDADEIRO, O LOOP CONTINUA A SER
EXECUTADO
 incremento INCREMENTA UMA VARÍAVEL DE CONTROLE DE
LOOP
LINGUAGEM C
COMANDO for - EXEMPLO
#include <stdio.h>
main()
{
int cont;
for ( cont = 0; cont <= 100; cont++ )
printf (“%d\n”, cont);
}
OBSERVAÇÃO:
a=a+1
========= a++
a=a-1
========= a--
LINGUAGEM C
BLOCOS DE CÓDIGO
UM BLOCO DE CÓDIGO É UM GRUPO DE COMANDOS (DOIS
OU MAIS) DE PROGRAMAS LÓGICAMENTE AGRUPADOS
UM BLOCO DE CÓDIGO É CRIADO QUANDO É COLOCADO
UMA SEQUENCIA DE COMANDO ENTRE CHAVES
EXEMPLO:
if ( a >= b)
{
printf (“O valor comparado é muito baixo, tente novamente”);
scanf (“%d”,^&b)
}
LINGUAGEM C
BLOCOS DE CÓDIGO
 SÃO UMA UNIDADE LÓGICA
 UM COMANDO NÃO PODE SER EXECUTADO SEM QUE O
OUTRO TAMBEM SEJA EXECUTADO
 PERMITE QUE SE IMPLEMENTE ALGORITMOS COM MAIOR
CLAREZA, ELEGÂNCIA E EFICIÊNCIA
 AJUDAM A CONCEITUALIZAR A VERDADEIRA NATUREZA
DA ROTINA
 UM BLOCO DE CÓDIGO PODE TER UM COMANDO APENAS,
NESTE CASO NÃO É NECESSÁRIO O ABRE E FECHA CHAVES
 O MAIS COMUM É TER NO MÍNIMO DOIS COMANDOS
LINGUAGEM C
CARACTERES
OUTRO TIPO IMPORTANTE EM C É O TIPO char (CARACTER)
 UM CARACTER É UM VALOR DE UM BYTE QUE É
UTILIZADO PARA MANTER CARACTERES IMPRIMÍVEIS OU
INTEIROS NA ESCALA DE -128 A + 127
 EM UM PROGRAMA, A CONSTANTE DE UM CARACTERE
 APARECE ENTRE ASPAS SIMPLES
LINGUAGEM C
CARACTERES - EXEMPLO
#include <stdio.h>
main()
{
char ch;
printf (“Entre com o caracter: “);
scanf (“%c”, &ch)
printf (“A entrada foi %c\n”, ch);
ch = ‘T’;
printf (“O valoR de ch é = %c\n”, ch);
}
LINGUAGEM C
CARACTERES - GETCH, GETCHE
#include <stdio.h>
main()
{
char ch;
ch = getche();
if (ch == ‘H’)
printf (“Você apertou a tecla mágica\n\n\n”);
else
printf (“Você apertou a tecla errada, tente novamente\n\n\”);
}
LINGUAGEM C
DIFERENÇA - getch, getche, scanf
scanf (“%c”, &ch) - ESPERA A DIGITAÇÃO DE UM CARACTER E A
SEGUIR A TECLA ENTER;
ch = getche () - APÓS A LEITURA DE UM CARACTER DO
TECLADO O CARACTER É MOSTRADO NA TELA E
ARMAZENADO NA VARIÁVEL ch, NÃO É NECESSÁRIO
APERTAR A TECLA ENTER.
ch = getch() - APÓS A LEITURA DE UM CARACTER DO TECLADO
O CARACTER NÃO É MOSTRADO NA TELA E ARMAZENADO
NA VARIÁVEL ch, NÃO É NECESSÁRIO APERTAR A TECLA
ENTER
LINGUAGEM C
STRING E MATRIZES
UMA STRING É UMA MATRIZ DE CARACTERES TERMINADO
POR UM ZERO BINÁRIO
EM C NÃO EXISTE O TIPO STRING
UMA MATRIZ É UM LISTA DE VARIÁVEIS DO MESMO TIPO
A MATRIZ É CRIADA , COLANDO ENTRE COLCHETES O SEU
TAMANHO, DEPOIS DO NOME DA MATRIZ
EXEMPLO:
char ch[15];
LINGUAGEM C
STRING E MATRIZES
O PRIMEIRO ELEMENTO DE UMA MATRIZ É SEMPRE ZERO
O SEGUNDO ELEMENTO É 1
O ULTIMO ELEMENTO DE UMA MATRIZ É SEMPRE O NÚMERO
DE ELEMENTO MENOS 1 ( N - 1 )
PARA FAZER REFERENCIA A UM ELEMENTO ESPECÍFICO DA
MATRIZ, É COLOCADO O ÍNDICE DO ELEMENTO ENTRE
COLCHETES, DEPOIS DO NOME DA MATRIZ
EXEMPLO:
if (ch[0] == ‘H’) ......
ch[ n - 1 ] = ‘h’
LINGUAGEM C
STRING E MATRIZES
A CARACTERÍSTICA MAIS IMPORTANTE A SER LEMBRADO EM
LINGUAGEM C É QUE A LINGUAGEM NÃO FAZ VERIFICAÇÃO
DE LIMITE, ISTO SIGNIFICA QUE É NECESSÁRIO TER MUITO
CUIDADO PARA NÃO IR ALÉM DOS LIMITES DA MATRIZ.
PARA O MOMENTO, A MANEIRA MAIS FÁCIL DE EVITAR ESSES
PROBLEMA É USAR UMA MATRIZ QUE SEJA GRANDE O
SUFICIÊNTE PARA CONTER TUDO O QUE VOCÊ QUISER
COLOCAR DENTRO DELA.
LINGUAGEM C
STRING E MATRIZES
EM C TODAS AS STRINGS TERMINAM COM UM ZERO BINÁRIO
QUE É ESPECIFICADO EM UM PROGRAMA NA FORMA DA
CONSTANTE DE CARACTERE ‘\0’.
EXEMPLO: ch[14] = ‘\0’;
PORTANTO, UMA MATRIZ ESTÁ SENDO PROJETADA PARA
SUPORTAR NO MÁXIMO 14 CARACTERES, NECESSITAMOS
AUMENTAR EM UM ESSE TAMANHO PARA FINALIZAR A
STRING COM O ‘\0’;
LINGUAGEM C
STRING E MATRIZES
PARA LER UMA STRING DO TECLADO, PRIMEIRO É
NECESSÁRIO CRIAR UMA MATRIZ DE CARACTERES PARA
CONTER A STRING E DEPOIS UTILIZAR A FUNÇÃO gets(). ESTA
FUNÇÃO RECEBE O NOME DA STRING COMO ARGUMENTO E
LÊ OS CARACTERES DO TECLADO ATÉ SER PRESSIONADO A
TECLA ENTER, O ENTER NÃO É ARMAZENADO, MAS
SUBSTITUIDO PELO TERMINADOR ZERO (‘\0’)
LINGUAGEM C
STRING E MATRIZES
#include <stdio.h>
main()
{
char str[80];
printf (“Entre com a string: “);
gets (str);
printf (“A string informada foi %s\n”, str );
}
A FORMATAÇÃO %s DIZ PARA A FUNÇÃO printf PARA IMPRIMIR
UMA STRING
LINGUAGEM C
printf - STRING DE FORMATAÇÃO
A FORMA GERAL DE UTILIZAÇÃO DA FUNÇÃO printf () É:
printf (“string de controle”, lista de argumentos)
NA FUNÇÃO printf(), A string de controle CONTÉM CARACTERES
QUE SERÃO EXIBIDOS NA TELA, COMANDOS DE
FORMATAÇÃO QUE DIZEM AO printf() COMO EXIBIR OS
ARGUMENTOS RESTANTES OU AMBOS.
CODIGOS DE FORMATAÇÃO VISTO ATÉ O MOMENTO:
%d - MOSTRA UM INTEIRO NO FORMATO DECIMAL
%f - MOSTRA UM FLOAT EM FORMATO DECIMAL
%c - MOSTRA UM CARACTER
%s
- MOSTRA UMA STRING
LINGUAGEM C
printf - VARIAÇÕES DE USO
#include <stdio.h>
main()
{
int i = 10;
float j = 10.123;
char k = ‘H’, str[20] = “Bom dia”;
printf (“Uma string qualquer\n”);
printf (“%d %f %c % s\n\n\n”, i, j, k, str );
printf (“MSG - %d %f, %c, %s\n\n\n”, 102, j, ‘K’, “Boa Tarde”);
}
LINGUAGEM C
scanf - STRING DE FORMATAÇÃO
A FORMA GERAL DE UTILIZAÇÃO DA FUNÇÃO scanf() É:
scanf (“string de controle”, lista de argumentos);
NO MOMENTO VAMOS ASSUMIR QUE NA string de controle PODE
CONTER APENAS CÓDIGOS DE FORMATAÇÃO
QUE SÃO:
%d - LEITURA DE UM NÚMERO INTEIRO
%f - LEITURA DE UM NÚMERO COM PONTO FLUTUANTE,
SEPARANDO A CASA DECIMAL POR UM PONTO (.)
NA LISTA DE ARGUMENTOS, UM & DEVE PRECEDER AS
VARIÁVEIS QUE IRÃO RECEBER OS VALORES LIDOS DO
TECLADO.
LINGUAGEM C
COMENTÁRIOS E ENDENTAÇÃO
 COMENTÁRIOS EM LINGUAGEM C É FEITO DA SEGUINTE
FORMA:
/* Isto é um Comentário em C */
TUDO QUE ESTIVER EM /* E */ SERÁ CONSIDERADO COMO
UM COMENTÁRIO E NÃO SERÁ PROCESSADO PELO
COMPILADOR
 ENDENTAÇÃO É A PRÁTICA DE ALINHAR OS BLOCOS DE
COMANDOS PARA FACILITAR A LEITURA. A ENDENTAÇÃO
NÃO É NECESSÁRIO NA LINGUAGEM C, MAS É FORTEMENTE
RECOMENDADO QUE O FAÇA.
UM NÍVEL DE ENDENTAÇÃO É FEITO A PARTIR DA ABERTURA
DE UMA CHAVE E O SEU FECHAMENTO.
LINGUAGEM C
ENDENTAÇÃO - EXEMPLO
If (a == 0 )
{
b = b * 3;
if ( b > 4 )
{
g = a * 4;
h = a / 4;
}
}
LINGUAGEM C
PALAVRAS RESERVADAS
LINGUAGEM C
IDENTIFICADORES
A LINGUAGEM C DEFINE IDENTIFICADORES COMO SENDO
NOMES USADOS PARA SE FAZER REFERÊNCIA A VARIÁVEIS,
FUNÇÕES, RÓTULOS, E VÁRIOS OUTROS OBJETOS DEFINIDOS
PELO USUÁRIO.
UM IDENTIFICADOR PODE TER VÁRIOS CARACTERES. O
PRIMEIRO DEVE SER SEMPRE UMA LETRA OU UM
SUBLINHADO E OS CARACTERES SEGUINTE DEVEM SER
LETRAS, NUMEROS OU UM SUBLINHADO
UM IDENTIFICADOR PODE TER NO MÁXIMO 32 CARACTERES
EXEMPLO: VAR1, VAR_2, VARXYZ, _123VAR - VALIDOS
12VAR, !VAR, %XYZ - NÃO VÁLIDOS.
LINGUAGEM C
TIPOS DE DADOS
TODAS AS VARIÁVEIS DEVEM SER DECLARADAS ANTES DE
SER DE SEU USO. ISTO É NECESSÁRIO PORQUE O
COMPILADOR C DEVE SABER QUE TIPO DE DADO A
VARIÁVEL É ANTES DE COMPILAR QUALQUER COMANDO NA
QUAL A VARIÁVEL É UTILIZADA.
EM ALGORITMOS GERALMENTE EXISTEM OS SEGUINTES
TIPOS: NÚMERO, LITERAL E BOOLEANO
EM C EXISTEM OS SEGUINTES TIPOS: CARACTER (char),
INTEIRO (int), PONTO FLUTUANTE (float), PONTO FLUTUANTE
DE DUPLA PRECISÃO (double), E SEM VALOR (void)
LINGUAGEM C
TIPOS DE DADOS
char - UTILIZADO PARA ARMAZENAR CARACTERES ASCII DE 8
BITS COMO AS LETRAS, ‘A’, ‘a’, ‘b’, ‘B’.
int - UTILIZADO PARA ARMAZENAR QUANTIDADES INTEIRAS
QUE NÃO REQUEIRAM UM COMPONENTE FRACIONÁRIO,
GERALMENTE UTILIZADO PARA CONTROLAR LOOPS E
COMANDOS CONDICIONAIS.
float, double - UTILIZADO QUANDO É NECESSÁRIO UM
COMPONENTE FRACIONÁRIO O QUANDO SEU APLICATIVO
NECESSITA DE UM VALOR MUITO GRANDE. A DIFERENÇA
ENTRE DOUBLE E FLOAT É A MAGNETUDE DO MAIOR E DO
MENOR NÚMERO QUE ELAS PODEM CONTER.
LINGUAGEM C
TIPOS DE DADOS
LINGUAGEM C
MODIFICADORES DE TIPO
MODIFICADORES DE TIPO É UTILIZADO PARA ALTERAR O
SIGNIFICADO DO TIPO-BASE PARA QUE ELE SE ADAPTE DE
MANEIRA MAIS PRECISA ÀS NECESSIDADES DAS VÁRIAS
SITUAÇÕES
OS MODIFICADORES DE TIPO SÃO: signed (com sinal), unsigned
(sem sinal), long, short
APLICAMOS OS MODIFICADORES signed, unsigned, long e short
AOS TIPOS BASE char E int. E TAMBÉM PODEMOS APLICAR
long AO TIPO BASE double
POR DEFAULT O TIPO BASE int JÁ signed
LINGUAGEM C
SINALIZAÇÃO DE VARIÁVEIS
PARA REPRESENTAR O SINAL DE UMA VARIÁVEL, É
UTILIZADO O BIT DE MAIOR GRANDEZA.
EXEMPLO:
+127 EM BINÁRIO É 00000000 01111111
-127 EM BINÁRIO É 10000000 01111111
* bit de sinal
LINGUAGEM C
MODIFICADORES DE TIPO
LINGUAGEM C
EXEMPLO - MODIF. DE TIPOS
#include <stdio.h>
main()
{
unsigned int i = 4294967290;
int j;
j = i;
printf (“%u %d \n”, i, j);
}
EXIBE: 4294967295 -1
%u É UM NOVO CÓDIGO DE FORMATAÇÃO PARA IMPRIMIR
UM INTEIRO SEM SINAL
LINGUAGEM C
DECLARAÇÃO DE VARIÁVEIS
FORMA GERAL DE DECLARAÇÃO DE VARIÁVEIS:
tipo lista_variaveis;
tipo DEVE SER UM TIPO VÁLIDO EM C E lista_variaveis PODE
CONSISTIR E UM OU MAIS IDENTIFICADORES SEPARADOS
POR VÍRGULA.
EXEMPLO:
int i, j, k;
unsigned int si;
float balanco, lucro, prejuizo;
REGRAS DE ESCOPO
O LUGAR ONDE UMA VARIÁVEL É DECLARADA AFETA EM
MUITO A MANEIRA COMO AS OUTRAS PARTES DE SEU
PROGRAMA PODEM USAR AQUELA VARIÁVEL.
AS REGRAS QUE DETERMINAM COMO UMA VARIÁVEL PODE
SER UTILIZADA COM BASE NO LUGAR DE SUA DECLARAÇÃO
NO PROGRAMA SÃO CHAMADAS REGRAS DE ESCOPO DA
LINGUAGEM.
AS VARIÁVEIS PODEM SER DECLARADAS EM TRÊS LOCAIS
DE SEU PROGRAMA:
- FORA DE TODAS AS FUNÇÕES (VARIÁVEIS GLOBAIS)
- DENTRO DE UMA FUNÇÃO (VARIÁVEIS LOCAIS)
- DECLARAÇÃO DOS PARÂMETROS FORMAIS DE FUNÇÃO
REGRAS DE ESCOPO
VARIÁVEIS GLOBAIS PODE SER UTILIZADA EM QUALQUER
PARTE DO PROGRAMA
 VARIÁVEIS LOCAIS PODEM SER UTILIZADAS SOMENTE
PELOS COMANDOS QUE ESTIVEREM DENTRO DA MESMA
FUNÇÃO. EM ESSÊNCIA, UMA VARIÁVEL LOCAL É
CONHECIDA SOMENTE DENTRO DA FUNÇÃO E
DESCONHECIDA FORA DAQUELA FUNÇÃO.
 PARÂMETROS FORMAIS DE FUNÇÃO SÃO UTILIZADOS
PARA RECEBER OS ARGUMENTOS QUE SÃO PASSADOS PARA
A FUNÇÃO, ESSES PARÂMETROS FUNCIONAM COMO
QUALQUER OUTRA VARIÁVEL LOCAL.
REGRAS DE ESCOPO - EXEMPLO
REGRAS DE ESCOPO COMENTÁRIOS DO PROGRAMA
 QUALQUER FUNÇÃO PODE ACESSAR A VARIÁVEL sum
 A FUNÇÃO total() NÃO PODE ACESSAR DIRETAMENTE A
VARIÁVEL LOCAL count DA FUNÇÃO main(), QUE DEVE SER
PASSADA COMO UM ARGUMENTO. ISTO É NECESSÁRIO
PORQUE UMA VARIÁVEL LOCAL SÓ PODE SER USADA PELO
CÓDIGO QUE ESTÁ NA MESMA FUNÇÃO NA QUAL ELA É
DECLARADA.
 NA FUNÇÃO display(), A VARIÁVEL count É COMPLETAMENTE
SEPARADA DA VARIÁVEL count DA FUNÇÃO main(),
NOVAMENTE POR QUE UMA VARIÁVEL LOCAL É CONHECIDA
APENAS PELA FUNÇÃO NA QUAL ELA É DECLARADA
REGRAS DE ESCOPO OBSERVAÇÕES
 NÃO PODE EXISTIR DUAS VARIÁVEIS GLOBAIS COM O
MESMO NOME
 UMA VARIÁVEL LOCAL EM UMA FUNÇÃO PODE TER O
MESMO NOME DE UMA VARIÁVEL LOCAL EM OUTRA
FUNÇÃO. A RAZÃO PARA ISTO É QUE O CÓDIGO E OS DADOS
DENTRO DE UMA FUNÇÃO SÃO COMPLETAMENTE
SEPARADOS DAQUELES EM OUTRA FUNÇÃO.
 DUAS VARIÁVEIS DENTRO DE UMA MESMA FUNÇÃO NÃO
PODE TER O MESMO NOME
OPERADORES DE RELAÇÃO E
LÓGICOS
 OPERADORES DE RELAÇÃO REFERE-SE ÀS RELAÇÕES QUE
OS VALORES PODEM TER UNS COM OS OUTROS
 OPERADORES LÓGICOS REFERE-SE ÀS MANEIRAS COMO
AS RELAÇÕES PODEM SER CONECTADAS.
OPERADORES DE RELAÇÃO: >, <, <=, >=, ==, !=
OPERADORES LÓGICOS: && (and) || (or) ! (not)
EXEMPLOS:
(a > b ), (c <= d), (a == b ), (e != a )
((a > b) && ( c <= d)), (((e != a ) || ( a == b ))) && (c < d ))
OPERADORES DE RELAÇÃO E
LÓGICOS
 A CHAVE PARA O CONCEITO DOS OPERADORES DE
RELAÇÃO E LÓGICOS É A IDÉIA DE VERDADEIRO E FALSO
 EM C, VERDADEIRO É QUALQUER VALOR DIFERENTE DE
ZERO, ENQUANTO FALSO É ZERO.
 AS EXPRESSÕES QUE USAM OPERADORES DE RELAÇÃO E
LÓGICOS RETORNARÃO 0 PARA FALSO E 1 PARA
VERDADEIRO.
OPERADORES DE RELAÇÃO E
LÓGICOS
main()
{
int i = 10, j = 20, k;
k = (i < j);
printf (“O conteúdo de i < j é %d\n”, k );
}
COMANDOS DE CONTROLE DE
FLUXO - COMANDO if
If (condicao)
comando/Bloco de comando;
else
comando/Bloco de comando;
if ANINHADOS
if (condicao1)
if (condicao2)
if (condicao3)
if condicao4)
if ANINHADOS COM else
If (x)
if (y)
printf (“1”);
else
printf (“2”);
if (x)
{
if (y)
printf (“1”)
}
else printf (“2”);
ESCADA if-else-if
If (condicao1)
comando/bloco de comando
else
if (condicao2)
comando/bloco de comando
else
if (condicao3)
comando/bloco de comando
else
comando/bloco de comando
COMANDO switch
A ESCADA if-else-if GERA UM CÓDIGO DIFICIL DE SER
SEGUIDO E NÃO GERA UMA SOLUÇÃO ELEGANTE.
A LINGUAGEM C TEM UM COMANDO DE VÁRIOS DESVIOS
CHAMADO DE SWITCH.
EM SWITCH, O COMPUTADOR TESTA UMA VARIÁVEL
SUCESSIVAMENTE CONTRA UMA LISTA DE CONSTANTES
INTEIRAS OU DE CARACTERES. DEPOIS DE ENCONTRAR UMA
COINCIDÊNCIA, O COMPUTADOR EXECUTA O COMANDO OU
BLOCO DE COMANDOS QUE ESTEJAM ASSOCIADOS ÀQUELA
CONSTANTE
COMANDO switch
Switch (variável)
{
case constante1 : sequência de comandos;
break;
case constante2 : sequência de comandos;
break;
case constante3 : sequência de comandos;
break;
default
}
: sequência de comandos;
COMANDO SWITCH ANINHADO
switch (x)
{
case 1 :
switch (y )
{
case ‘a’ : sequência de comandos;
break;
case ‘b’ : sequência de comandos;
break;
}
break;
case 2 :
}
LOOP for
For ( i = 0; i < 100; i ++ )
comando/Bloco de comandos;
for ( i = 0; i < 100; i++ )
for ( j = 0; j < 50, j++);
printf (“%d “, matriz[i][j] );
for ( ; ; )
// Looping infinito
comando/Bloco de comandos;
for (x = 0; x != 123; )
comando/Bloco de comandos
LOOP while e do-while
while (condicao)
comando/Bloco de comandos;
while (1) // looping
comando/Bloco de comandos;
do
{
comando/Bloco de comandos;
} while (condicao)
INTERRUPÇÃO DE LOOPS
O COMANDO BREAK TEM DOIS USOS. O PRIMEIRO É
ENCERRAR UM case NO COMANDO switch. O SEGUNDO É
FORÇAR O TÉRMINO IMEDIATO DE UM LOOP, PASSANDO POR
CIMA DO TESTE NORMAL DO LOOP.
QUANDO O COMPUTADOR ENCONTRA O COMANDO break
DETRO DE UM LOOP, ELE IMEDIATAMENTE ENCERRA O LOOP
MAIS INTERNO.
for ( i = 0 ; i < 1000; i++)
{
if ( i == 100 ) break;
printf (“Estou em looping no for “);
}
COMANDO continue
O COMANDO continue FUNCIONA DE MANEIRA PARECIDA COM
O COMANDO break. PORÉM EM VEZ DE FORÇAR O
ENCERRAMENTO, continue FORÇA A PRÓXIMA ITERAÇÃO DO
LOOP E PULA O CÓDIGO QUE ESTIVER NO MEIO.
for (x = 0; x < 100; x++ )
{
if ( x % 2 )
continue;
printf (“%d\n”, x );
}
MATRIZES MULTIDIMENSIONAIS
EM LINGUAGEM C, A FORMA MAIS SIMPLES DE UMA MATRIZ
MULTIDIMENSIONAL É A MATRIZ BIDIMENSIONAL QUE É
DECLARADO DA SEGUINTE FORMA:
int multidim[4][3]
NO CASO ACIMA FOI DEFINIDO UMA MATRIZ
MULTIDIMENSIONAL COM DUAS DIMENSÕES, ISTO É, 4
LINHAS E TRÊS COLUNAS, ONDE O PRIMEIRO ELEMENTO
DESTA MATRIZ POSSUI O INDICE [0][0] E O ÚLTIMO
ELEMENTO POSSUI O INDICE [3][2].
C ALOCA PERMANENTEMENTE ESPAÇO NA MEMÓRIA PARA
TODOS OS ELEMENTOS DA MATRIZ. NO CASO DE UMA
MATRIZ BIDIMENTSIONAL, PODEMOS UTILIZA A FÓRMULA
ABAIXO PARA ENCONTRAR O NÚMERO DE BYTES DE
MEMÓRIA. - BYTES = LINHA * COLUNA * SIZEOF (TIPO_DADO)
MATRIZES MULTIDIMENSIONAIS
Main()
{
int x, y;
int varmat[5][4];
for (x = 0; x < 5; x++)
for (y = 0; y < 4; y++)
varmat[x][y] = 0;
}
MATRIZES DE STRINGS
EM PROGRAMAÇÃO NÃO É MUITO RARO USAR UMA MATRIZ
DE STRINGS COMO POR EXEMPLO UM BANCO DE DADOS DE
ERROS, EXEMPLO
1 - ARQUIVO NÃO ECONTRADO
2 - ARQUIVO BLOQUEADO
DEFINIÇÃO DE UMA MATRIZ DE STRING
char matriz_de_erro [10][80]
ACIMA DEFINIMOS UMA MATRIZ COM 10 LINHAS DE ERRO E
MENSAGENS QUE NÃO TÊM MAIS DO QUE 80 COLUNAS.
PRIMEIRO INDICE INDICA NÚMERO DE LINHAS E O SEGUNDO
INDICE INDICA A QUANTIDADE DE CARACTERES DE CADA
LINHA
MATRIZES DE STRINGS - FUNÇÃO
gets
PARA REALIZAR A ENTRADA DE DADOS DE UMA MATRIZ DE
CARACTERES UTILIZAMOS A FUNÇÃO gets DA SEGUINTE
FORMA:
char arraymsg[5][80];
gets (&arraymsg[0][0]);
PARA MOSTRAR AS MENSAGENS UTILIZAMOS O CÓDIGO
ABAIXO:
for (x=0; x < 5; x++)
printf (“%s\n”, arraymsg[x][0];
INICIALIZAÇÃO DE MATRIZES
A LINGUAGEM C PERMITE A INICIALIZAÇÃO DE MATRIZES
DA SEGUINTE FORMA:
MATRIZES UNIDIMENSIONAIS
int var[5] = {1,2,3,4,5};
char var[5] = {‘a’, ‘b’, ‘c’, ‘d’, ‘\0’ }; ou char var[5]=“abcd”
MATRIZES MULTIDIMENSIONAIS
int var[2][3] = {1,2,4,
5,6,7}
INICIALIZAÇÃO DE MATRIZES
MATRIZES SEM TAMANHO DEFINIDO
EM ALGUMAS VEZES É NECESSÁRIO CONTAR O NÚMERO DE
CARACTERES PARA DEFINIR O TAMANHO DE UMA
MENSAGENS:
char e1[12]=“read error \n”;
char e2[13]=“write error \n”;
O COMPILADOR C PERMITE A DETERMINAÇÃO DINÂMICA DO
TAMANHO DA MATRIZ QUE INICIALIZADA NO MOMENTO DA
SUA CRIAÇÃO, DESTA FORMA NÃO É NECESSÁRIO
PREOCUPAR-SE COM O SEU TAMANHO
char e1[ ]=“read error \n”;
char e2[ ]=“write error”\n”;
INICIALIZAÇÃO DE MATRIZES
A FUNÇÃO sizeof PODE SER UTILIZADO PARA RESGATAR O
ESPAÇO DE MEMÓRIA OCUPADO POR UMA VARIÁVEL EM
MEMÓRIA .
main()
{
int x, y[10], z[2] [2], tx, ty, tz;
tx = sizeof (x);
ty = sizeof (y);
tz = sizeof (z);
printf (tx = %d, ty = %d, tz = %d\n”, tx, ty, tz)
}
PONTEIROS
PONTEIROS
UM PONTEIRO É UMA VARIÁVEL QUE CONTÉM O ENDEREÇO
DE MEMÓRIA, OU SEJA, ESSE ENDEREÇO É A LOCALIZAÇÃO
DE UMA OUTRA VARIÁVEL NA MEMÓRIA.
SE UMA VARIÁVEL CONTÉM O ENDEREÇO DE UMA OUTRA
VARIÁVEL, ENTÃO DIZEMOS QUE A PRIMEIRA APONTA PARA
A SEGUNDA.
PONTEIROS-DECLARAÇÃO DE
VARIÁVEIS
DECLARAÇÃO DE PONTEIRO: tipo *nome_var;
EXEMPLO: int *ptr
PONTEIROS-OPERADORES
OPERADORES DE PONTEIROS:
EXEMPLO:
int a = 0;
int *ptr;
ptr = &a;
printf (“Conteúdo da Variavel ptr e %p\n”, ptr );
& - OPERADOR UNÁRIO QUE DEVOLVE O ENDEREÇO DE
MEMÓRIA DA VARIÁVEL (a)
NO EXEMPLO ACIMA, A VARIÁVEL( ptr) IRÁ CONTER O
ENDEREÇO DE MEMÓRIA DA VARIÁVEL (a). SE A VARIÁVEL (a)
ESTÁ LOCALIZADO NO ENDEREÇO 2000, ENTÃO O VALOR DE
(ptr) SERÁ 2000.
PONTEIROS - OPERADORES
* - OPERADOR UNÁRIO QUE DEVOLVE O VALOR DA
VARIÁVEL LOCALIZADA NO ENDEREÇO QUE SE SEGUE
int a = 0, b = 100;
int *ptr;
ptr = &a;
b = *ptr;
printf (“Conteúdo da posição apontada por %d\n”, b );
NO EXEMPLO ACIMA, A VARIÁVEL (a) ESTÁ LOCALIZADO NA
POSIÇÃO 2000 E A VARIÁVEL (b) ESTÁ NA POSIÇÃO 2002 E A
VARIÁVEL (ptr) ESTÁ NA POSIÇÃO 2004, O CONTÉUDO DE (a) É
0, DE (b) É 100 E DE (ptr) 2000, NA INSTRUÇÃO (b=*ptr OU
b=*(2000)), O VALOR ARMAZENADO NA POSIÇÃO 2000 ESTÁ
SENDO ATRIBUÍDO A VARIÁVEL (b)
PONTEIROS - IMPORTÂNCIA DO
TIPOS BASE
NO EXEMPLO ANTERIOR, O VALOR DE DA VARIÁVEL (a) FOI
COPIADA PARA A VARIÁVEL (b) DE FORMA INDIRETA, ISTO É,
ATRAVÉS DE PONTEIROS
PERGUNTA - COMO A LINGUAGEM C SABE DETERMINAR A
QUANTIDADE DE BYTES A SER COPIADO PARA A VARIÁVEL
(b) DO ENDEREÇO APONTADO POR (ptr) ????
EM OUTRAS PALAVRAS, COMO É QUE O COMPILADOR
TRANSFERE O NÚMERO ADEQUADO DE BYTES PARA
QUALQUER ATRIBUIÇÃO QUE USA UM PONTEIRO ?
A RESPOSTA A AMBAS AS PERGUNTAS QUESTÕES É QUE O
TIPO-BASE DO PONTEIRO DETERMINA O TIPO DE DADOS
PARA O QUAL O COMPUTADOR ASSUME QUE O PONTEIRO
ESTÁ APONTANDO.
PONTEIRO - IMPORTÂNCIA DO
TIPO BASE
float x=10.1, y;
int *p;
p = &x;
y = *p;
printf (“%f %f \n”, x, y);
O PROGRAMA ACIMA NÃO IRÁ ATRIBUIR O VALOR DE (x)
PARA (y). COMO O PROGRAMA DECLARA (p) COMO SENDO UM
PONTEIRO PARA INTERIO, O COMPILADOR IRÁ TRANSFERIR
APENAS DOIS BYTES DE INFORMAÇÃO PARA (y) E NÃO 4
BYTES QUE NORMALMENTE FORMAM UM NÚMERO DE
FONTO FLUTUANTE
EXPRESSÕES COM PONTEIROS
EM GERAL AS EXPRESSÕES QUE ENVOLVEM PONTEIROS
OBEDECEM ÀS MESMAS REGRAS DAS EXPRESSÕES EM C.
- ATRIBUIÇÕES COM PONTEIROS
int x;
int *p1, *p2;
p1 = &x;
p2 = p1;
printf (“%p %p %d %d \n”, p2, p1, *p1, *p2);
EXPRESSÕES COM PONTEIROS
PODEMOS USAR APENAS DUAS OPERAÇÕES ARITMÉTICAS
EM PONTEIROS: + E -.
PARA ENTENDER O QUE OCORRE NA ARITMÉTICA COM
PONTEIROS SUPONHA QUE (p1) SEJA UM PONTEIRO PARA UM
INTEIRO, COM VALOR CORRENTE DE 2000.
DEPOIS DA EXPRESSÃO
p1++;
O CONTEÚDO DE (p1) SERÁ DE 2002 E NÃO 2001.
SE O VALOR CORRENTE DE (p1) É 2000, ENTÃO APÓS A
OPERAÇÃO
p1--;
O VALOR DE (p1) SERÁ DE 1998.
OPERAÇÕES COM PONTEIRO
char *ch = 2000;
int *i = 2000;
OPERAÇÕES COM PONTEIROS
CADA VEZ QUE O COMPUTADOR INCREMENTA O PONTEIRO,
ELE APONTA PARA A LOCALIZAÇÃO DE MEMÓRIA DO
PRÓXIMO ELEMENTO DE SEU TIPO-BASE.
CADA VEZ QUE O COMPUTADOR DECREMENTA O PONTEIRO,
ELE APONTA PARA A LOCALIZAÇÃO DE MEMÓRIA DO
ELEMENTO ANTERIOR
A LINGUAGEM C PERMITE INCREMENTO E DECREMENTO DE
CONSTANTES INTEIRA A UM PONTEIRO:
p1 = p1 + 5;
SE (p1) É UM PONTEIRO PARA UM int E O SEU CONTEÚDO É
2000, ENTÃO APÓS A OPERAÇÃO O SEU VALOR SERÁ DE 2010
OPERAÇÕES COM PONTEIROS
OPERAÇÕES NÃO PERMITIDAS COM PONTEIROS:
 MULTIPLICAR OU DIVIDIR PONTEIROS;
 SOMAR OU SUBTRAIR DOIS PONTEIROS;
 APLICAR AOS PONTEIROS O DESLOCAMENTO DE BIT A BIT
 APLICAR OPERADORES COM MÁSCARA
 SOMAR OU SUBTRAIR OS TIPOS double OU float DE OU PARA
PONTEIROS
OPERAÇÕES COM PONTEIROS
- COMPARAÇÕES DE PONTEIROS
É POSSÍVEL COMPARAR DOIS PONTEIROS EM UMA
EXPRESSÃO DE RELAÇÃO. POR EXEMPLO DADOS DOIS
PONTEIROS p1 E p2, O SEGUINTE FORMATO É PERFEITAMENTE
VÁLIDO:
if (p1 < p2 )
printf (“p1 aponta para uma posição inferior de memória do que p2”);
EM GERAL UTILIZAMOS COMPARAÇÕES DE PONTEIROS
QUANDO DOIS OU MAIS PONTEIROS ESTÃO APONTANDO
PARA UM OBJETO COMUM
PONTEIROS E MATRIZES
EXISTE UM RELACIONAMENTO MUITO PRÓXIMO ENTRE
PONTEIROS E AS MATRIZES.
CONSIDERE O FRAGMENTO:
char str[80], *p;
char *p1;
p1 = str;
ESTE FRAGMENTO AJUSTA p1 PARA O ENDEREÇO DO
PRIMEIRO ELEMENTO DA MATRIZ (str).
EM C, O NOME DE UMA MATRIZ SEM UM ÍNDICE É O
ENDEREÇO DO INÍCIO DA MATRIZ. EM ESSËNCIA, O NOME
DA MATRIZ É UM PONTEIRO PARA AQUELA MATRIZ.
PONTEIROS E MATRIZES
PARA ACESSAR O QUINTO ELEMENTO str[4] OU *(p1 + 4);
É BOM LEMBRAR QUE AS MATRIZES COMEÇAM COM ZERO,
PORTANTO ESSES DOIS COMANDOS USAM O NÚMERO 4 PARA
INDEXAR (str). PODEMOS TAMBÉM SOMAR 4 AO PONTEIRO
(p1) PARA OBTER O QUINTO ELEMENTO, PORQUE (p1)
ATUALMENTE APONTA PARA O PRIMEIRO ELEMENTO DE (str).
A LINGUAGEM C PERMITE, ESSENCIALMENTE DOIS
MÉTODOS DE ACESSO AOS ELEMENTOS DE UMA MATRIZ: A
INDEXAÇÃO E A ARITMÉTICA DE PONTEIROS.
A ARITMÉTICA DE PONTEIRO É MAIS RÁPIDO QUE A
INDEXAÇÃO DE MATRIZES.
PONTEIROS E MATRIZES
ACESSO ATRAVÉS DE INDEXAÇÃO
main()
{
char str[80] = “Boa Noite Brasil”;
int i;
for (i = 0; str[i]; i++)
printf (“%c”, str[i]);
printf (“\n”);
}
PONTEIROS E MATRIZES
ACESSO ATRAVÉS DE PONTEIROS
Main()
{
char str[80] = “Boa Noite Brasil”, *p;
p = str;
while ( *p )
{
printf (“%c”, *p );
p++;
}
INDEXANDO UM PONTEIRO
EM C PODEMOS INDEXAR UM PONTEIRO COMO SE ELE FOSSE
UMA MATRIZ. ESSA HABILIDADE INDICA DE FORMA MAIS
CLARA O ESTREITO RELACIONAMENTO ENTRE PONTEIROS E
AS MATRIZES
main()
{
int i[5] = {1, 2, 3, 4, 5};
int *p, t;
p = i;
for (t = 0; t < 5; t++)
printf (“%d “, p[t] ); ou printf (“%d”, *(p + t));
}
Download

c - FESP