Centro Integrado de Tecnologia da Informação

Slides:



Advertisements
Apresentações semelhantes
Curso de aprofundamento na linguagem C
Advertisements

C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
V Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. v Funções – são procedimentos.
Construção de Algoritmos AULA 07
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Algoritmos e Estrutura de Dados I
AULA – Linguagem C – Vetores, Ponteiros Estruturas
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Linguagem C Strings.
Vetores, Matrizes e Funções
Revisão da Linguagem C.
Introdução a Computação e Cálculo Numérico
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Aula prática 6 Vetores e Matrizes
+ Java Web XIV Jornada de Cursos. Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes.
Curso de Nivelamento LCG
1 Ponteiros Ponteiros são variáveis que guardam localizações em memória. A declaração de uma variável ponteiro x para um dado tipo type é type *x; Essa.
PROGRAMAÇÃO ESTRUTURADA II
Definição de Tipos Estruturas e Ponteiros
CADEIA DE CARACTERES (Strings)
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Argumentos por valor Passagem de valor da variável indicada Não permite alteração de variável indicada Exemplo: int quadrado_de(int ); //protótipo int.
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
+ Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
+ Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
+ Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
Linguagem C : Ponteiros
Técnicas de Desenvolvimento de Programas
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Estruturas Homogêneas – Vetores e Matrizes
Linguaguem de Programação II
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Algoritmo e Estrutura de Dados I Aulas 14 – Linguagem C Matriz Márcia Marra
Linguagem de Programação
Fundamentos de Programação 1
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 3 Allan Lima adsl@cin.ufpe.br

Sob as seguintes condições: Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes condições: Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. Veja aqui a licença completa

Roteiro Ponteiros Funções Diretivas de compilação

Vetores e Ponteiros Quando declaramos uma matriz: tipo meuArray[tam]; O compilador aloca a matriz em uma região de memória contínua meuArray na verdade é um ponteiro para a primeira posição da memória que foi alocada. meuArray[10] é equivalente a *(meuArray + 10)

Vetores e Ponteiros Podemos usar ponteiros como se fossem matrizes: int mat[] = { 1, 2 , 3 }; int *p = mat; printf(“%d”, p[2]); // imprime 3

Exemplo #include <stdio.h> int main() { int mat[50][50]; int i, j; // percorre a matriz com dois loops for (i = 0; i < 50; i++) { for (j = 0; j < 50; j++) { mat[i][j] = 0; } return 0;

Exemplo #include <stdio.h> int main() { int mat[50][50]; int *p= (int *) mat, i; // percorre a matriz com um único loop for (i = 0; i < 2500; i++) { *p = 0; p++; } return 0; É muito mais rápido e diminui o tamanho do código

Vetores e Ponteiros Matrizes não podem ser usadas como ponteiros Exemplo: int vetor[10]; int *ponteiro, i; ponteiro = &i; // as operações a seguir são inválidas // ERRADO: vetor não é variável vetor = vetor + 2; *vetor = 0; vetor = ponteiro; tipo meuArray[];  const tipo * meuArray;

Strings e Ponteiros Strings são variáveis do tipo *char Exemplo: #include <stdio.h> #include <string.h> int main() { char curso[15]; char *p = "Curso de C/C++“; // p pode ser usado como uma string strcpy(curso, p); printf("%s %s\n", curso, p); return 0; }

Ponteiro do tipo void Este tipo de ponteiro pode apontar para qualquer outro tipo Mas para se ter acesso ao conteúdo por ele endereçado precisamos fazer um cast É útil para a passagem de parâmetros genéricos

Exemplo #include <stdio.h> int main() { char *s = "string"; int a = 1, *p = &a; float f = 2.0; void *v; v = p; // v aponta para um inteiro a = *((int *) v); v = s; // v aponta para uma string s = (char *) v; v = &f; // v aponta para um float f = *((float *) v); return 0; }

Matrizes de Ponteiros Podemos declarar matrizes de ponteiros Exemplos: // vetor de ponteiros int *vetor[10]; // vetor de strings char *strings[] = {"EU", "TU", "ELE" }; // matriz de ponteiros int *matriz[2][2];

Ponteiros para Ponteiros Guardam o endereço de outro ponteiro Sintaxe: tipo **nomeDaVariavel; Também podem ser usados como matrizes bidimensionais Podemos criar ponteiros para ponteiros para ponteiros para ponteiros, e assim por diante

Exemplo #include <stdio.h> int main() { int a = 10, *p, **pp; p = &a; pp = &p; printf("%d\n", **pp); // imprime 10 return 0; } Obs.: Para acessar o valor de a através de pp usamos o operador * duas vezes

Cuidados ao utilizar ponteiros Saiba sempre para onde o ponteiro esta apontando Nunca utilize um ponteiro sem que antes ele tenha sido inicializado

Exemplo // Errado - Não execute int main () { int a,*p; a = 10; *p = a; // Para onde p aponta??? return 0; }

Funções Funções são estruturas que permitem ao programador separar o seu código em blocos Ajudam a tornar o código mais legível e fácil de reutilizar Um bom programador deve saber como dividir o seu problema em funções para torná-lo mais fácil de resolver

Sintaxe tipoDeRetorno nomeDaFuncao(listaDeParâmetros) { corpoDaFuncao; } listaDeParâmetros = tipo1 nome1, ... , tipoN nomeN

Parâmetros Os parâmetros são cópias das variáveis originais (Chamada por valor) Mas podemos utilizar ponteiros como parâmetros e com isto alterar o valor de uma variável que não pertence à função (Chamada por referência) Exemplo: int a; scanf(“%d”, &a);

O comando return Sintaxe: O return encerra a execução da função return nomeDaVariável; nomeDaVariável não é usado em funções que retornam void O return encerra a execução da função Pode ser comparado com o break usado nos loops Uma função pode ter mais de um return

Exemplo int dividir(int a, int b) { if (!b) { return 0; // evita a divisão por 0 } return a / b;

Protótipos de funções Os compiladores de C são muito eficientes, mas isto traz alguns problemas Funções só podem ser usadas se forem definidas anteriormente A solução é utilizar protótipos de funções Sintaxe: tipoDeRetorno nomeDaFunção(tipo1, ... , tipoN);

Exemplo void b(int); // protótipo de b void a(int i) { // ... b(i); } void b(int j) { a(j);

Ponteiros para Funções Sintaxe: tipoDeRetorno (*nomeDoPonteiro) (tipoP1, ... , tipoPN) Exemplo: int (*p)(const char *); p = puts; // inicializa (*p) (“UFPE”); // faz a chamada Também podemos passar ponteiros para funções como parâmetro de outras funções

Exemplo exemploPonteiroFuncao.c

A função main Principal função do programa Sintaxe completa: int main(int argc, char *argv[]); Permite que o usuário passe argumentos para o programa argc é quantidade de parâmetros argv contém os parâmetros Obs.: argv[0] contém o nome do programa por isso, argc > 0

Exemplo #include <stdio.h> int main (int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) { printf("%s\n", argv[i]); } printf("total: %d\n", argc); return 0;

Diretivas de Compilação São comandos que não são compilados, mas sim interpretados pelo pré-processador Todas as diretivas começam por # e podem ser utilizadas em qualquer parte do código Principais diretivas definidas no C ANSI: #if, #ifdef, #ifndef, #else, #elif, #endif,#include, #define, #undef, #error

A Diretiva #include Diz ao compilador para incluir um arquivo especificado no seu programa Sintaxe: #include <nomeDoArquivo> O arquivo se encontra no path do compilador #include “nomeDoArquivo” O arquivo se encontra em outro local Exemplos: #include <string.h> #include “pessoa.h”

A Diretiva #define Define uma macro no compilador Sintaxe: Exemplos: #define nomeDaMacro corpoDaMacro copoDaMacro é opcional Exemplos: #define TAMANHO 10 #define _WIN32 #define max(a,b) ((a>b)?(a):(b))

A Diretiva #undef Apaga uma macro do compilador Sintaxe: Exemplo: #undef nomeDaMacro Exemplo: #undef max

As Diretivas #ifdef e #endif Permite a compilação condicional Sintaxe: #ifdef nomeDaMacro corpoDaMacro // código #endif Se existir uma macro chamada nomeDaMacro no compilador corpoDaMacro será compilado #endif é usada para indicar o fim da macro

A Diretiva #ifndef Sintaxe: #ifndef nomeDaMacro corpoDaMacro // código #endif Se não existir uma macro chamada nomeDaMacro no compilador corpoDaMacro será compilado

As Diretivas #if, #else e #elif Sintaxe: #if expressãoConstante1 declarações1 #elif expressãoConstante2 declarações2 ... #elif expressãoConstanteN declaraçõesN #else declarações #endif

Exemplo exemploDiretivas.c exemploError.c

Exercícios Implemente as seguintes funções: int mystrlen(char *c) retorna o tamanho da string c void mystrcpy(char *dest, char *orig) copia orig para dest void mystrcat(char *dest, char *orig) concatena orig em dest int mystrchar(char *str, char c) Retorna o índice onde c ocorre em str Declare um ponteiro para uma das funções que você fez no exercício anterior e chame-a utilizando o mesmo Crie as seguintes macros: min(a,b) Retorna o mínimo entra a e b isPar(a) Retorna 1 se a for par e 0 caso contrário

Referências Curso de C da UFMG http://ead1.eee.ufmg.br/cursos/C/ Slides de Gustavo (ghcp@cin.ufpe.br) do curso de C/C++

Agradecimentos Gustavo Henrique Porto Pedro Silva Leite Pelo material cedido para montagem da aula Pedro Silva Leite Pela revisão da aula