SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
ELT048 - SOE



Ponteiros, Structs e Buffers Circulares

              Rodrigo Almeida
       Universidade Federal de Itajubá
Ponteiros
Ponteiros
●   São variáveis que guardam o endereço (localização)
    de memória.
    ●   Nestes endereços da memória é possível colocar
        valores e utilizá-los.
●   Os tipos de valores colocados nos endereços de
    memória são definidos na declaração de um ponteiro.
    ●   É esse tipo que indica ao compilador a quantidade de
        memória necessária para armazenar os valores.
●   Uma variável do tipo ponteiro aponta para uma
    variável de um determinado tipo (char, int, float,
    double, . . .).
Ponteiros
●   É necessário na         ●   Sintaxe:
    declaração de um            tipo *nomeVariavel;
    ponteiro, especificar
    para qual tipo de
    variável ele irá
    apontar.
●   Os ponteiros são
    declarados com um
    * antes do nome da
    variável.
Ponteiros
int *aux;           ●   aux, temp e pont são
float *temp;            variáveis que
                        armazenam endereços
char *pont;             de memória e não
                        valores do tipo int, float
                        ou char.
                    ●   * é usado quando
                        deseja-se acessar o
                        valor que está na
                        posição de memória e
                        não ao endereço da
                        memória.
Ponteiros
Ponteiros
●   Operador &:                        ●   Operador *:
    ●   Obtém sempre o                     ●   O operador * faz o
        endereço de uma                        contrário do operador
        variável                               &.
    ●   Como os ponteiros                  ●   Dado um ponteiro, o
        também são variáveis                   operador * acessa o
        eles também ocupam                     conteúdo apontado
        memória.                               por ele.
        –   Pode-se obter o
            endereço do ponteiro
            e ter ponteiros para
            ponteiros (múltiplos *).
Ponteiros
●   Simbolo &:            ●   Simbolo *:
    ●   “endereço de”         ●   “derreferenciando”
    ●   “salvo em”            ●   “através de”
                              ●   “apontado por”
Exemplo
#include <stdio.h>

int main(int argc, char *argv[]){
   int x=10;
   int *p1=&x; //ponteiro para um inteiro
   printf("x = %dnn", x);
   *p1=20; //ou p1[0]=20;
   printf("p1 = %un", p1);
   printf("x = %dn", x);
   printf("*p1 = %dn", *p1);
   printf("p1[0] = %dnn", p1[0]);
   return 0;
} //end main
Passagem de parâmetros
●   As funções em linguagem C podem receber
    vários parâmetros e pode retornar um.
●   O método de envio dos parâmetros pode
    ser feito na pilha ou nos registradores.
    ●   A pilha permite que diversos parâmetros sejam
        passados de uma única vez
    ●   Os registros possuem menor overhead, sendo
        portanto mais rápidos e com menor tamanho
        de código
Passagem de parâmetros
●   No envio, os parâmetros são copiados para uma
    variável temporária, de modo que as alterações
    em seu valor são perdidas após o fim da função.
    ●   A variável inicial não é alterada
●   Para evitar esta situação é comum realizar a
    passagem de parâmetro por referência.
●   Na passagem por referência é passado o
    endereço da variável de modo que a função
    consiga alterar o valor da variável original.
void incrementa(int a){
  a += 1;
}

int main(int argc, char *argv[]){
  int x = 10;

    incrementa(x);

    return 0;
}
Rotina Principal           Função



void main(void){
  int x = 10;

    incrementa(x);        void incrementa(int a)
                          {
                            a+=1;
                            return;
                          }
    return 0;
}
Rotina Principal       Função         Variáveis

void main(void)
{
  int x = 10;                               x=10


    inc(x);            void inc(int a){
                         a += 1;
                         return;
                       }

    return 0;
}
Rotina Principal       Função         Variáveis

void main(void)
{
  int x = 10;                               x=10
                                            a=10
    inc(x);            void inc(int a){
                         a += 1;
                         return;
                       }

    return 0;
}
Rotina Principal       Função         Variáveis

void main(void)
{
  int x = 10;                               x=10
                                            a=11
    inc(x);            void inc(int a){
                         a += 1;
                         return;
                       }

    return 0;
}
Rotina Principal       Função         Variáveis

void main(void)
{
  int x = 10;                               x=10
                                          descartado
    inc(x);            void inc(int a){
                         a += 1;
                         return;
                       }

    return 0;
}
void incrementaptr(int* a){
   (*a) += 1;
}

int main(int argc, char *argv[]){
    int x = 10;

    incrementaptr(&x);

    return 0;
} //end main
Rotina Principal       Função        Variáveis

void main(void)
{
  int x = 10;                              x=10


    incptr(&x);        void incptr
                             (int* a){
                         (*a) += 1;
                         return;
                       }
    return 0;
}
Rotina Principal       Função        Variáveis

void main(void)
{
  int x = 10;                              x=10
                                         temp=&x
    incptr(&x);        void incptr
                             (int* a){
                         (*a) += 1;
                         return;
                       }
    return 0;
}
Rotina Principal       Função        Variáveis

void main(void)
{
  int x = 10;                              x=10
                                           a=&x
    incptr(&x);        void incptr
                             (int* a){
                         (*a) += 1;
                         return;
                       }
    return 0;
}
Rotina Principal       Função        Variáveis

void main(void)
{
  int x = 10;                              x=11


    incptr(&x);        void incptr
                                           a=&x      *
                             (int* a){
                         (*a) += 1;
                         return;
                       }
    return 0;
}
Rotina Principal       Função        Variáveis

void main(void)
{
  int x = 10;                              x=11
                                         descartado
    incptr(&x);        void incptr
                             (int* a){
                         (*a) += 1;
                         return;
                       }
    return 0;
}
Passagem de parâmetros
●   A passagem de parâmetros por referência
    permite que uma função “retorne” mais de
    um parâmetro por vez.
●   Isto é feito passando-se uma variável via
    referência para que a função possa
    escrever nela.
Structs
●   As estruturas (structs) são a ferramenta
    pela qual o programador pode agrupar
    diversas variáveis de tipos diferentes num
    mesmo conjunto.
●   Utilizando-se a diretiva typedef é possível
    definir-se um novo tipo de variável.
Structs
typedef struct{
  char titulo[30];
  char producao[20];
  char dataCompra[8];
  int temporada;
  float preco;
}t_serietv;


t_serietv s1 = {"Big Bang Theory", "Warner",
                "25/05/10", 3, 55.50};
strcpy(s1.titulo,"The Big Bang Theory");
strcpy(s1.producao, "Warner Bros");
s1.temporada = 6;
printf("A serie foi produzida pela %s,", s1.producao);
printf(" e esta na temporada %dn", s1.temporada);
Structs
●   O acesso dos         typedef struct{
                            char nome[20];
    membros internos        int idade;
    de estruturas        }t_aluno;
    apontadas por
    ponteiros pode ser   t_aluno *a1;
    feito através do     (*a1).nome = "Joao";
    operador ->          (*a1).idade = 18;

                         a1->nome = "Joao";
                         a1->idade = 18;
Buffers
●   Buffers são regiões de memória para
    armazenamento temporário de
    informações.
●   Podem ser implementados em SW ou HW.
●   Muito comuns em protocolos de
    comunicação.
Buffers
●   Buffers circulares auxiliam na
    implementação de filas do tipo FIFO (first
    in, first out)
●   Em geral são implementados em cima de
    um vetor com funções para a manipulação
    deste.
●   É necessário possuir ponteiros/variáveis
    que indiquem o começo e fim do buffer.
●   Deve-se tomar cuidado na escolha
Exercício
●   Implementar um buffer circular
●   Utilizar um vetor de 10 posições
●   Cada elemento do vetor é uma estrutura
    com duas variáveis
    ●   char NomeDoProcesso
    ●   int Prioridade
●   Criar uma função para adicionar novos
    elementos e uma para retirar os mais
    antigos.
Ponteiros para void
●   Aponta para uma região de memória sem
    especificar o tipo.
●   Não pode ser utilizado sem casting
●   Abstração que permite ao programador
    passar parâmetros de diferentes tipos para
    a mesma função.
    ●   A função que os receber deve saber como
        tratar cada tipo.
Ponteiros para void

char *name = "Paulo";

double weight = 87.5;

unsigned int children = 3;

void main (void){
   //não confundir com printf
   print(0, name);
   print(1, &weight);
   print(2, &children);
}
Ponteiros para void
void print(int option; void *parameter){
  switch(option){
     case 0:
        printf("%s",(char*)parameter);
     break;
     case 1:
        printf("%f",*((double*)parameter));
     break;
     case 2:
        printf("%d",*((unsigned int*)parameter));
     break;
  }
}
Exercício (cont)
●   Implementar um buffer circular
●   Utilizar um vetor de 10 posições
●   Cada elemento do vetor é uma estrutura com
    duas variáveis
    ●   char tipo
    ●   void* ptr
●   Criar uma função para adicionar novos elementos
    e uma para retirar os mais antigos.
    ●   Add(char tipo, void* var);
    ●   Remove(void);

Contenu connexe

Tendances

Propriedades dos logaritmos
Propriedades dos logaritmosPropriedades dos logaritmos
Propriedades dos logaritmosDavisonsm
 
Exercícios Resolvidos: Distribuição Binomial
Exercícios Resolvidos: Distribuição BinomialExercícios Resolvidos: Distribuição Binomial
Exercícios Resolvidos: Distribuição BinomialDiego Oliveira
 
Aula introdução à lógica matemática
Aula introdução à lógica matemáticaAula introdução à lógica matemática
Aula introdução à lógica matemáticaAristóteles Meneses
 
Ficha de trabalho numeros reais
Ficha de trabalho numeros reaisFicha de trabalho numeros reais
Ficha de trabalho numeros reaisGisela Carvalho
 
Introdução à probabilidade - Probabilidade frequentista
Introdução à probabilidade - Probabilidade frequentistaIntrodução à probabilidade - Probabilidade frequentista
Introdução à probabilidade - Probabilidade frequentistaAnselmo Alves de Sousa
 
Conjunto dos Números Inteiros
Conjunto dos Números Inteiros Conjunto dos Números Inteiros
Conjunto dos Números Inteiros Helen Batista
 
Exercícios Resolvidos - Domínios de funções; Injetividade;Composta;Inversa
Exercícios Resolvidos - Domínios de funções; Injetividade;Composta;InversaExercícios Resolvidos - Domínios de funções; Injetividade;Composta;Inversa
Exercícios Resolvidos - Domínios de funções; Injetividade;Composta;Inversanumerosnamente
 
Aula 7 - Funções Logarítmicas, Exponenciais e Trigonometricas
Aula 7 - Funções Logarítmicas, Exponenciais e TrigonometricasAula 7 - Funções Logarítmicas, Exponenciais e Trigonometricas
Aula 7 - Funções Logarítmicas, Exponenciais e TrigonometricasTurma1NC
 

Tendances (20)

Propriedades dos logaritmos
Propriedades dos logaritmosPropriedades dos logaritmos
Propriedades dos logaritmos
 
Números Inteiros
Números InteirosNúmeros Inteiros
Números Inteiros
 
TEORIA DE CONJUNTOS
TEORIA DE CONJUNTOS TEORIA DE CONJUNTOS
TEORIA DE CONJUNTOS
 
Conjuntos numéricos
Conjuntos numéricosConjuntos numéricos
Conjuntos numéricos
 
Quadrilateros
QuadrilaterosQuadrilateros
Quadrilateros
 
Pg
PgPg
Pg
 
Aula 02 Cálculo de limites - Conceitos Básicos
Aula 02   Cálculo de limites - Conceitos BásicosAula 02   Cálculo de limites - Conceitos Básicos
Aula 02 Cálculo de limites - Conceitos Básicos
 
Função exponencial
Função exponencialFunção exponencial
Função exponencial
 
Exercícios Resolvidos: Distribuição Binomial
Exercícios Resolvidos: Distribuição BinomialExercícios Resolvidos: Distribuição Binomial
Exercícios Resolvidos: Distribuição Binomial
 
Aula introdução à lógica matemática
Aula introdução à lógica matemáticaAula introdução à lógica matemática
Aula introdução à lógica matemática
 
Funções
FunçõesFunções
Funções
 
Distribuição binomial, poisson e hipergeométrica - Estatística I
Distribuição binomial, poisson e hipergeométrica - Estatística IDistribuição binomial, poisson e hipergeométrica - Estatística I
Distribuição binomial, poisson e hipergeométrica - Estatística I
 
Ficha de trabalho numeros reais
Ficha de trabalho numeros reaisFicha de trabalho numeros reais
Ficha de trabalho numeros reais
 
Introdução à probabilidade - Probabilidade frequentista
Introdução à probabilidade - Probabilidade frequentistaIntrodução à probabilidade - Probabilidade frequentista
Introdução à probabilidade - Probabilidade frequentista
 
Conjunto dos Números Inteiros
Conjunto dos Números Inteiros Conjunto dos Números Inteiros
Conjunto dos Números Inteiros
 
Exercícios Resolvidos - Domínios de funções; Injetividade;Composta;Inversa
Exercícios Resolvidos - Domínios de funções; Injetividade;Composta;InversaExercícios Resolvidos - Domínios de funções; Injetividade;Composta;Inversa
Exercícios Resolvidos - Domínios de funções; Injetividade;Composta;Inversa
 
Aula 12 medidas de dispersão
Aula 12   medidas de dispersãoAula 12   medidas de dispersão
Aula 12 medidas de dispersão
 
Aula 7 - Funções Logarítmicas, Exponenciais e Trigonometricas
Aula 7 - Funções Logarítmicas, Exponenciais e TrigonometricasAula 7 - Funções Logarítmicas, Exponenciais e Trigonometricas
Aula 7 - Funções Logarítmicas, Exponenciais e Trigonometricas
 
1 ano função afim
1 ano   função afim1 ano   função afim
1 ano função afim
 
Grafos e Árvores
Grafos e ÁrvoresGrafos e Árvores
Grafos e Árvores
 

En vedette

Dicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHPDicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHPAlmir Neto
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginasMikeNandes
 
CakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroCakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroJuan Basso
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem Claudson Oliveira
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Conceitos básicos de AEDS
Conceitos básicos de AEDSConceitos básicos de AEDS
Conceitos básicos de AEDSPablo Silva
 
Glosario de qbasic liliana
Glosario de qbasic lilianaGlosario de qbasic liliana
Glosario de qbasic lilianakhjhjhjh
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoIvan Rosolen
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrênciaPablo Silva
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 

En vedette (20)

Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Funções em C
Funções em CFunções em C
Funções em C
 
Apostila cobol
Apostila cobolApostila cobol
Apostila cobol
 
Dicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHPDicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHP
 
PROGRAMAS QBASIC
PROGRAMAS QBASICPROGRAMAS QBASIC
PROGRAMAS QBASIC
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 
Recursividade
RecursividadeRecursividade
Recursividade
 
CakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroCakePHP com sotaque brasileiro
CakePHP com sotaque brasileiro
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Introdução ao PHP
Introdução ao PHPIntrodução ao PHP
Introdução ao PHP
 
C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Conceitos básicos de AEDS
Conceitos básicos de AEDSConceitos básicos de AEDS
Conceitos básicos de AEDS
 
Glosario de qbasic liliana
Glosario de qbasic lilianaGlosario de qbasic liliana
Glosario de qbasic liliana
 
Linguagem C - Uniões
Linguagem C - UniõesLinguagem C - Uniões
Linguagem C - Uniões
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 

Similaire à Ponteiros, Structs e Buffers Circulares

Similaire à Ponteiros, Structs e Buffers Circulares (20)

Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Aula 6 pc - slides
Aula 6   pc - slidesAula 6   pc - slides
Aula 6 pc - slides
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Função malloc
Função mallocFunção malloc
Função malloc
 
F sharp e o paradigma funcional
F sharp e o paradigma funcionalF sharp e o paradigma funcional
F sharp e o paradigma funcional
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_java
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Pged 01
Pged 01Pged 01
Pged 01
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Revisão sobre ponteiros em C
Revisão sobre ponteiros em CRevisão sobre ponteiros em C
Revisão sobre ponteiros em C
 
Aula17
Aula17Aula17
Aula17
 
Ed1
Ed1Ed1
Ed1
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 

Plus de Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenhariasRodrigo Almeida
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Rodrigo Almeida
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Rodrigo Almeida
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio LacerdaRodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporaisRodrigo Almeida
 
Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosRodrigo Almeida
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusRodrigo Almeida
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCDRodrigo Almeida
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialRodrigo Almeida
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosRodrigo Almeida
 

Plus de Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporais
 
Kernel cooperativo
Kernel cooperativoKernel cooperativo
Kernel cooperativo
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 

Ponteiros, Structs e Buffers Circulares

  • 1. ELT048 - SOE Ponteiros, Structs e Buffers Circulares Rodrigo Almeida Universidade Federal de Itajubá
  • 3. Ponteiros ● São variáveis que guardam o endereço (localização) de memória. ● Nestes endereços da memória é possível colocar valores e utilizá-los. ● Os tipos de valores colocados nos endereços de memória são definidos na declaração de um ponteiro. ● É esse tipo que indica ao compilador a quantidade de memória necessária para armazenar os valores. ● Uma variável do tipo ponteiro aponta para uma variável de um determinado tipo (char, int, float, double, . . .).
  • 4. Ponteiros ● É necessário na ● Sintaxe: declaração de um tipo *nomeVariavel; ponteiro, especificar para qual tipo de variável ele irá apontar. ● Os ponteiros são declarados com um * antes do nome da variável.
  • 5. Ponteiros int *aux; ● aux, temp e pont são float *temp; variáveis que armazenam endereços char *pont; de memória e não valores do tipo int, float ou char. ● * é usado quando deseja-se acessar o valor que está na posição de memória e não ao endereço da memória.
  • 7. Ponteiros ● Operador &: ● Operador *: ● Obtém sempre o ● O operador * faz o endereço de uma contrário do operador variável &. ● Como os ponteiros ● Dado um ponteiro, o também são variáveis operador * acessa o eles também ocupam conteúdo apontado memória. por ele. – Pode-se obter o endereço do ponteiro e ter ponteiros para ponteiros (múltiplos *).
  • 8. Ponteiros ● Simbolo &: ● Simbolo *: ● “endereço de” ● “derreferenciando” ● “salvo em” ● “através de” ● “apontado por”
  • 9. Exemplo #include <stdio.h> int main(int argc, char *argv[]){ int x=10; int *p1=&x; //ponteiro para um inteiro printf("x = %dnn", x); *p1=20; //ou p1[0]=20; printf("p1 = %un", p1); printf("x = %dn", x); printf("*p1 = %dn", *p1); printf("p1[0] = %dnn", p1[0]); return 0; } //end main
  • 10. Passagem de parâmetros ● As funções em linguagem C podem receber vários parâmetros e pode retornar um. ● O método de envio dos parâmetros pode ser feito na pilha ou nos registradores. ● A pilha permite que diversos parâmetros sejam passados de uma única vez ● Os registros possuem menor overhead, sendo portanto mais rápidos e com menor tamanho de código
  • 11. Passagem de parâmetros ● No envio, os parâmetros são copiados para uma variável temporária, de modo que as alterações em seu valor são perdidas após o fim da função. ● A variável inicial não é alterada ● Para evitar esta situação é comum realizar a passagem de parâmetro por referência. ● Na passagem por referência é passado o endereço da variável de modo que a função consiga alterar o valor da variável original.
  • 12. void incrementa(int a){ a += 1; } int main(int argc, char *argv[]){ int x = 10; incrementa(x); return 0; }
  • 13. Rotina Principal Função void main(void){ int x = 10; incrementa(x); void incrementa(int a) { a+=1; return; } return 0; }
  • 14. Rotina Principal Função Variáveis void main(void) { int x = 10; x=10 inc(x); void inc(int a){ a += 1; return; } return 0; }
  • 15. Rotina Principal Função Variáveis void main(void) { int x = 10; x=10 a=10 inc(x); void inc(int a){ a += 1; return; } return 0; }
  • 16. Rotina Principal Função Variáveis void main(void) { int x = 10; x=10 a=11 inc(x); void inc(int a){ a += 1; return; } return 0; }
  • 17. Rotina Principal Função Variáveis void main(void) { int x = 10; x=10 descartado inc(x); void inc(int a){ a += 1; return; } return 0; }
  • 18. void incrementaptr(int* a){ (*a) += 1; } int main(int argc, char *argv[]){ int x = 10; incrementaptr(&x); return 0; } //end main
  • 19. Rotina Principal Função Variáveis void main(void) { int x = 10; x=10 incptr(&x); void incptr (int* a){ (*a) += 1; return; } return 0; }
  • 20. Rotina Principal Função Variáveis void main(void) { int x = 10; x=10 temp=&x incptr(&x); void incptr (int* a){ (*a) += 1; return; } return 0; }
  • 21. Rotina Principal Função Variáveis void main(void) { int x = 10; x=10 a=&x incptr(&x); void incptr (int* a){ (*a) += 1; return; } return 0; }
  • 22. Rotina Principal Função Variáveis void main(void) { int x = 10; x=11 incptr(&x); void incptr a=&x * (int* a){ (*a) += 1; return; } return 0; }
  • 23. Rotina Principal Função Variáveis void main(void) { int x = 10; x=11 descartado incptr(&x); void incptr (int* a){ (*a) += 1; return; } return 0; }
  • 24. Passagem de parâmetros ● A passagem de parâmetros por referência permite que uma função “retorne” mais de um parâmetro por vez. ● Isto é feito passando-se uma variável via referência para que a função possa escrever nela.
  • 25. Structs ● As estruturas (structs) são a ferramenta pela qual o programador pode agrupar diversas variáveis de tipos diferentes num mesmo conjunto. ● Utilizando-se a diretiva typedef é possível definir-se um novo tipo de variável.
  • 26. Structs typedef struct{ char titulo[30]; char producao[20]; char dataCompra[8]; int temporada; float preco; }t_serietv; t_serietv s1 = {"Big Bang Theory", "Warner", "25/05/10", 3, 55.50}; strcpy(s1.titulo,"The Big Bang Theory"); strcpy(s1.producao, "Warner Bros"); s1.temporada = 6; printf("A serie foi produzida pela %s,", s1.producao); printf(" e esta na temporada %dn", s1.temporada);
  • 27. Structs ● O acesso dos typedef struct{ char nome[20]; membros internos int idade; de estruturas }t_aluno; apontadas por ponteiros pode ser t_aluno *a1; feito através do (*a1).nome = "Joao"; operador -> (*a1).idade = 18; a1->nome = "Joao"; a1->idade = 18;
  • 28. Buffers ● Buffers são regiões de memória para armazenamento temporário de informações. ● Podem ser implementados em SW ou HW. ● Muito comuns em protocolos de comunicação.
  • 29. Buffers ● Buffers circulares auxiliam na implementação de filas do tipo FIFO (first in, first out) ● Em geral são implementados em cima de um vetor com funções para a manipulação deste. ● É necessário possuir ponteiros/variáveis que indiquem o começo e fim do buffer. ● Deve-se tomar cuidado na escolha
  • 30. Exercício ● Implementar um buffer circular ● Utilizar um vetor de 10 posições ● Cada elemento do vetor é uma estrutura com duas variáveis ● char NomeDoProcesso ● int Prioridade ● Criar uma função para adicionar novos elementos e uma para retirar os mais antigos.
  • 31. Ponteiros para void ● Aponta para uma região de memória sem especificar o tipo. ● Não pode ser utilizado sem casting ● Abstração que permite ao programador passar parâmetros de diferentes tipos para a mesma função. ● A função que os receber deve saber como tratar cada tipo.
  • 32. Ponteiros para void char *name = "Paulo"; double weight = 87.5; unsigned int children = 3; void main (void){ //não confundir com printf print(0, name); print(1, &weight); print(2, &children); }
  • 33. Ponteiros para void void print(int option; void *parameter){ switch(option){ case 0: printf("%s",(char*)parameter); break; case 1: printf("%f",*((double*)parameter)); break; case 2: printf("%d",*((unsigned int*)parameter)); break; } }
  • 34. Exercício (cont) ● Implementar um buffer circular ● Utilizar um vetor de 10 posições ● Cada elemento do vetor é uma estrutura com duas variáveis ● char tipo ● void* ptr ● Criar uma função para adicionar novos elementos e uma para retirar os mais antigos. ● Add(char tipo, void* var); ● Remove(void);