SlideShare uma empresa Scribd logo
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);

Mais conteúdo relacionado

Mais procurados

Prml 3 3.3
Prml 3 3.3Prml 3 3.3
Prml 3 3.3
Arata Honda
 
13.2 derivadas e integrais de funções vetoriais (1)
13.2 derivadas e integrais de funções vetoriais (1)13.2 derivadas e integrais de funções vetoriais (1)
13.2 derivadas e integrais de funções vetoriais (1)
pricilasantos2015
 
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEBHTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
PeslPinguim
 
Functional Programming by Examples using Haskell
Functional Programming by Examples using HaskellFunctional Programming by Examples using Haskell
Functional Programming by Examples using Haskell
goncharenko
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 
Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明
Yoshihiro Mizoguchi
 
Aula 2 prática computacional de estatística descritiva
Aula 2   prática computacional de estatística descritivaAula 2   prática computacional de estatística descritiva
Aula 2 prática computacional de estatística descritiva
Rodrigo Rodrigues
 
統計的学習の基礎6章前半 #カステラ本
統計的学習の基礎6章前半 #カステラ本統計的学習の基礎6章前半 #カステラ本
統計的学習の基礎6章前半 #カステラ本
Akifumi Eguchi
 
Variaveis+aleatorias
Variaveis+aleatoriasVariaveis+aleatorias
Variaveis+aleatorias
Fagner Talles
 
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
Ryoma Sin'ya
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
Luciano Ramalho
 
ゼロから作るDeepLearning 5章 輪読
ゼロから作るDeepLearning 5章 輪読ゼロから作るDeepLearning 5章 輪読
ゼロから作るDeepLearning 5章 輪読
KCS Keio Computer Society
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
Vladimir Kostyukov
 
主成分分析(Pca)
主成分分析(Pca)主成分分析(Pca)
主成分分析(Pca)
Shushi Namba
 
PRML 3.5.2, 3.5.3, 3.6
PRML 3.5.2, 3.5.3, 3.6PRML 3.5.2, 3.5.3, 3.6
PRML 3.5.2, 3.5.3, 3.6
Kohei Tomita
 
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう 「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
Junpei Tsuji
 
Regressão - aula 01/04
Regressão - aula 01/04Regressão - aula 01/04
Regressão - aula 01/04
Rodrigo de Sá
 
Prml3.5 エビデンス近似〜
Prml3.5 エビデンス近似〜Prml3.5 エビデンス近似〜
Prml3.5 エビデンス近似〜
Yuki Matsubara
 
A new approach for ranking of intuitionistic fuzzy numbers
A new approach for ranking of intuitionistic fuzzy numbersA new approach for ranking of intuitionistic fuzzy numbers
A new approach for ranking of intuitionistic fuzzy numbers
Journal of Fuzzy Extension and Applications
 
PRML 6.4-6.5
PRML 6.4-6.5PRML 6.4-6.5
PRML 6.4-6.5
正志 坪坂
 

Mais procurados (20)

Prml 3 3.3
Prml 3 3.3Prml 3 3.3
Prml 3 3.3
 
13.2 derivadas e integrais de funções vetoriais (1)
13.2 derivadas e integrais de funções vetoriais (1)13.2 derivadas e integrais de funções vetoriais (1)
13.2 derivadas e integrais de funções vetoriais (1)
 
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEBHTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
 
Functional Programming by Examples using Haskell
Functional Programming by Examples using HaskellFunctional Programming by Examples using Haskell
Functional Programming by Examples using Haskell
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明
 
Aula 2 prática computacional de estatística descritiva
Aula 2   prática computacional de estatística descritivaAula 2   prática computacional de estatística descritiva
Aula 2 prática computacional de estatística descritiva
 
統計的学習の基礎6章前半 #カステラ本
統計的学習の基礎6章前半 #カステラ本統計的学習の基礎6章前半 #カステラ本
統計的学習の基礎6章前半 #カステラ本
 
Variaveis+aleatorias
Variaveis+aleatoriasVariaveis+aleatorias
Variaveis+aleatorias
 
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
ゼロから作るDeepLearning 5章 輪読
ゼロから作るDeepLearning 5章 輪読ゼロから作るDeepLearning 5章 輪読
ゼロから作るDeepLearning 5章 輪読
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
主成分分析(Pca)
主成分分析(Pca)主成分分析(Pca)
主成分分析(Pca)
 
PRML 3.5.2, 3.5.3, 3.6
PRML 3.5.2, 3.5.3, 3.6PRML 3.5.2, 3.5.3, 3.6
PRML 3.5.2, 3.5.3, 3.6
 
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう 「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
 
Regressão - aula 01/04
Regressão - aula 01/04Regressão - aula 01/04
Regressão - aula 01/04
 
Prml3.5 エビデンス近似〜
Prml3.5 エビデンス近似〜Prml3.5 エビデンス近似〜
Prml3.5 エビデンス近似〜
 
A new approach for ranking of intuitionistic fuzzy numbers
A new approach for ranking of intuitionistic fuzzy numbersA new approach for ranking of intuitionistic fuzzy numbers
A new approach for ranking of intuitionistic fuzzy numbers
 
PRML 6.4-6.5
PRML 6.4-6.5PRML 6.4-6.5
PRML 6.4-6.5
 

Destaque

Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
Adriano Teixeira de Souza
 
Funções em C
Funções em CFunções em C
Funções em C
Pablo Silva
 
Apostila cobol
Apostila cobolApostila cobol
Apostila cobol
lucioandrade
 
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
Almir Neto
 
PROGRAMAS QBASIC
PROGRAMAS QBASICPROGRAMAS QBASIC
PROGRAMAS QBASIC
Jaime Zapata
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
MikeNandes
 
Recursividade
RecursividadeRecursividade
Recursividade
Pablo Silva
 
CakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroCakePHP com sotaque brasileiro
CakePHP com sotaque brasileiro
Juan Basso
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
Pablo Silva
 
Introdução ao PHP
Introdução ao PHPIntrodução ao PHP
Introdução ao PHP
Adao Chiavelli
 
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 CakePHP
Rangel Javier
 
Conceitos básicos de AEDS
Conceitos básicos de AEDSConceitos básicos de AEDS
Conceitos básicos de AEDS
Pablo Silva
 
Glosario de qbasic liliana
Glosario de qbasic lilianaGlosario de qbasic liliana
Glosario de qbasic liliana
khjhjhjh
 
Linguagem C - Uniões
Linguagem C - UniõesLinguagem C - Uniões
Linguagem C - Uniões
Elaine Cecília Gatto
 
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
elliando dias
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
Elaine Cecília Gatto
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
Ivan Rosolen
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
Pablo Silva
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
Felipe Ribeiro
 

Destaque (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
 

Semelhante a Conceitos de ponteiros struct e buffers

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
Adriano Teixeira de Souza
 
Aula 6 pc - slides
Aula 6   pc - slidesAula 6   pc - slides
Aula 6 pc - slides
Elaine Cecília Gatto
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
Claudia Ferlin
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
Elaine Cecília Gatto
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
Itália Camolesi
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
Rodrigo Almeida
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
Jean Martina
 
Função malloc
Função mallocFunçã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
Evandro Souza
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_java
Marcos Souza
 
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
Elaine Cecília Gatto
 
Pged 01
Pged 01Pged 01
Pged 01
samuelthiago
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
Eder Magalhães
 
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
Gustavo Fernandes Dos Santos
 
Revisão sobre ponteiros em C
Revisão sobre ponteiros em CRevisão sobre ponteiros em C
Revisão sobre ponteiros em C
Pablo Silva
 
Aula17
Aula17Aula17
Ed1
Ed1Ed1
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
Vinícius Hax
 
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
Helder da Rocha
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
Fabio Moura Pereira
 

Semelhante a Conceitos de ponteiros struct e buffers (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
 

Mais de Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
Rodrigo 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 Lacerda
Rodrigo 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 drivers
Rodrigo Almeida
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
Rodrigo Almeida
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporais
Rodrigo Almeida
 
Kernel cooperativo
Kernel cooperativoKernel cooperativo
Kernel cooperativo
Rodrigo Almeida
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
Rodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
Rodrigo 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 virus
Rodrigo Almeida
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
Rodrigo Almeida
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
Rodrigo Almeida
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
Rodrigo Almeida
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
Rodrigo Almeida
 

Mais 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
 

Último

Teoria de redes de computadores redes .doc
Teoria de redes de computadores redes .docTeoria de redes de computadores redes .doc
Teoria de redes de computadores redes .doc
anpproferick
 
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Annelise Gripp
 
Gestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefíciosGestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefícios
Rafael Santos
 
REDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptx
REDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptxREDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptx
REDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptx
IranyGarcia
 
PRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product ownerPRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product owner
anpproferick
 
Como fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptxComo fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptx
tnrlucas
 

Último (6)

Teoria de redes de computadores redes .doc
Teoria de redes de computadores redes .docTeoria de redes de computadores redes .doc
Teoria de redes de computadores redes .doc
 
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
 
Gestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefíciosGestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefícios
 
REDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptx
REDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptxREDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptx
REDE_DE_COMPUTADORES_TECNOLOGIA_TIPOS.pptx
 
PRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product ownerPRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product owner
 
Como fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptxComo fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptx
 

Conceitos de ponteiros struct e buffers

  • 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);