Ponteiros.

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Programação II Estruturas de Dados
Désiré NGuessan Programação II Estruturas de Dados
Programação II Estruturas de Dados
Introdução a Programação
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Alocação Dinâmica de Memória
Prof. Luis Otavio Alvares
Programação II Estruturas, uniões e enumerações
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AULA – Linguagem C – Vetores, Ponteiros Estruturas
UDESC - Prof. Juliano Maia
Ponteiros em C.
LPG – I Prof. Flavio Marcello
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
PROGRAMAÇÃO ou LINGUAGEM C?
Linguagem C Strings.
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Ponteiros em Linguagem C
VETORES, STRINGS E MATRIZES
1MF. Vectores Tipo de dado usado para representar um CONJUNTO de dados do um mesmo tipo Estrutura de dados homogénea unidimensional Ex: Ler a nota de 3.
Listas Encadeadas.
Revisão da Linguagem C.
Apontadores ou Ponteiros
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Introdução a Computação e Cálculo Numérico
Ponteiros Variáveis do tipo “ponteiro” armazenam endereços de memória
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
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.
Linguagem de Programação II Parte V
Linguagem de Programação II Parte IX
Definição de Tipos Estruturas e Ponteiros
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
PROGRAMAÇÃO I PONTEIROS.
Estrutura de Dados Avançada
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Programação em C++ Compiladores
Vetores e Matrizes Ameliara Freire
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Algoritmos e Estruturas de Dados I – Ponteiros
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
PROGRAMAÇÃO ou LINGUAGEM C?
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
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.
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
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
PROGRAMAÇÃO II – PARTE 6 Profa. Maria Augusta Constante Puget.
Ponteiros em C Prof. Kariston Pereira
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Estruturas Homogêneas – Vetores e Matrizes
Aula Prática 6 Vetores e Matrizes Monitoria
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.
Transcrição da apresentação:

Ponteiros

Endereços de variáveis A linguagem C permite armazenamento e manipulação de endereços de memória Para cada tipo existente, pode existir um tipo ponteiro para armazenar o endereço de memória onde existe um valor daquele tipo Da mesma forma que declaramos uma variável para armazenar um tipo específico de dado (inteiro, por exemplo), podemos reservar espaço na memória para armazenar o endereço de memória de outra variável

Ponteiros de variáveis Variável Ponteiro guarda o endereço de uma variável (posição de memória) cujo conteúdo correspondente ao seu tipo Sintaxe: para declarar um ponteiro que armazenará o endereço de uma variável do tipo <tipo_var> <tipo_var> *<nome_ponteiro>; Exemplo: int *p; cria uma variável p que pode armazenar um endereço de memória onde exista um inteiro armazenado

Ponteiros de variáveis Operadores de Ponteiro: & e * &a = (endereço da variável a) aplicado a uma variável, resulta no endereço da posição de memória reservada para a variável *p = conteúdo da variável cujo endereço está armazenado em p aplicado a uma variável do tipo ponteiro, acessa o conteúdo do endereço de memória armazenado neste ponteiro

Ponteiros de variáveis Exemplos de declarações: /* variável inteira */ int num; /* variável ponteiro para inteiro */ int *p; Memória p - 206 num - 202

Ponteiros de variáveis Exemplos: /* num recebe o valor 5 */ num = 5; /* p recebe o endereço de num diz-se que p aponta para num */ p = &num; /* conteúdo de p recebe o valor 8 */ *p = 8; - 5 206 202 p num 202 5 206 p num 202 8 206 p num

Ponteiros de variáveis Exemplo: int main( ) { int a; int *p; p = &a; *p = 2; printf(" %d ", a); }

Erros Comuns com Ponteiros Usa a memória apontada por p sem inicializar p, que contém "lixo" inicialmente; armazena 2 em uma posição de memória desconhecida. Isto pode fazer com que o programa grave dados em um espaço de outro programa, por exemplo! int main( ) { int a, b, *p; a = 2; *p = a; b = a + (*p); printf(" %d ", b); }

Erros Comuns com Ponteiros int main( ) { int a, b, *p; a = 2; *p = &a; printf(" %d ", *p); } Tenta armazenar em p o endereço de a, mas na verdade está armazenando em uma outra posição de memória apontada por p, que é desconhecida.

Erros Comuns com Ponteiros int main( ) { int a, *p; a = 15; p = a; printf(" %d ", *p); } Não guarda o endereço de a em p, mas sim o conteúdo de a; quando escreve *p, estará escrevendo o conteúdo da memória localizada no endereço 15 e não o valor 15!

Vetores

Tipos de Dados Compostos Combinação (agregados) de estruturas mais simples: de elementos homogêneos: vetor/matriz de elementos heterogêneos: struct estruturas tem um único nome a manipulação é feita sobre um componente elementar de cada vez algumas linguagens permitem atribuir valores ou comparar agregados inteiros 153

Estruturas Homogêneas Conjunto finito de posições de memória do mesmo tipo, referenciadas por um nome comum Os elementos são acessados através de um índices Em C, todos os vetores consistem em posições contíguas de memória Podem ter uma (vetor) ou mais dimensões (matriz) Caso particular: string (vetor de caracteres) 159

Vetores Declaração: <tipo> <nome>[<tamanho>]; Um elemento pode ser acessado por indexação: <nome>[<índice>] Se <índice> estiver fora do domínio implica em erro, detectado em tempo de execução 159

Vetores O primeiro elemento tem sempre índice zero e o último tem índice <tamanho>-1 Uma referência a primeira posição da área onde o objeto de informação está armazenado é um ponteiro Exemplo: float vet[8]; vetor para armazenar números reais de 8 posições os elementos variam de vet[0] até vet[7] algumas ling (algol 68, ada e apl) => a[3.:5,5:12] => subvetor bidimensional c/ 24 elementos 1. amarração em tempo de compilação: SUBCONJUNTO FIXADO QUANDO O PGM É ESCRITO -FORTRAN, C, PASCAL - variaveis estáticas e semi-estáticas 2. amarração em tempo de criação:subconjunto fixado em tempo de execucão de criação de uma instância de variável -variáveis semidinamicas 3. amarraçào em tempo de manipulação do objeto: vetores flexíveis - maior custo => típico de lps interpretativas: o tam. pode ser alterado em qq instante de seu tempo de vida => lps compiladas = ALGOL 68 e CLU => dinâmicas   159

Vetores - Exemplo /* Cálculo da média e variância de 8 números reais */ #include <stdio.h> main( ) { float v[8], med=0, var=0; int i; for (i=0 ; i<8; i++) { scanf("%f", &v[i]); med += v[i]; } med = med / 8; for (i=0 ; i<8; i++) var += (v[i]-med) * (v[i]-med); var = var / 8; printf("Media = %f \t Variancia = %f \n", med, var); 159

Vetores - Exemplo /* Verificar a existência de um número no vetor */ #include <stdio.h> main( ) { float v[8], med=0, var=0, num; int i, cont=0; for (i=0 ; i<8; i++) scanf("%f", &v[i]); scanf("%f", &num); if (num == v[i]) cont++; if (cont) printf("Número existe \n"); else printf("Número NÃO existe \n"); } 159

Vetores e Ponteiros Existe uma forte associação entre vetores e ponteiros a variável que representa o vetor é uma constante que armazena o endereço inicial do vetor int vet[8]; vet (sem indexação) é um ponteiro para o primeiro elemento do vetor Inicialização: int vet[5]={5, 10, 15, 20, 25}; 159

Vetores e Aritmética de Ponteiros Operações permitidas: adição e subtração Sendo p um ponteiro para um elemento do vetor, p+1 representa um ponteiro para o próximo elemento do vetor armazenado na memória (desde que não exceda o limite) Exemplo: (vet+i): ponteiro para o elemento vet[i] corresponde a &vet[i] *(vet+i): conteúdo do elemento vet[i] corresponde a vet[i] 159

Vetores & Ponteiros - Exemplo /* Verificar a existência de um número no vetor */ #include <stdio.h> main( ) { float v[8], med=0, var=0, num; int i, cont=0; for (i=0 ; i<8; i++) scanf("%f", &v[i]); scanf("%f", &num); if (num == *(v+i)) cont++; if (cont) printf("Numero existe\n"); else printf("Numero NAO existe\n"); } 159

Agregados Homogêneos - Matrizes Declaração: <tipo> <nome>[<tam1>] [<tam2>]; matriz 10 x 5  vetor de 2 dimensões int mat[10][5]; 160

Seqüências operações sobre cadeias: Exemplo: cadeias de caracteres (strings) operações sobre cadeias: concatenação seleção do primeiro ou último componente uma subcadeia pode ser extraída especificando-se as posições do primeiro e do último caracteres desejados 164

String de Caracteres Trata cadeias de caracteres como vetores char a[50], b[30] #define nome ”Maria” Utiliza funções para manipular strings Pode ter um número arbitrário de caracteres A linguagem C utiliza um '\0' como uma marca de fim de string

String de Caracteres Manipulação de strings strcpy(s1,s2): copia s2 em s1 strcat(s1,s2): concatena s2 no final de s1 strlen(s1): tamanho de s1 strcmp(s1,s2): zero de s1==s2, negativo se s1<s2 e positivo se s1>s2 requerem: #include <string.h> 126

String Strings de Caracteres Nome possui 5 posições Índices de 0 a 4 CUIDADOS ESPECIAIS char nome[5]; strcpy(nome, “Maria”); Nome possui 5 posições Índices de 0 a 4 M A R I A \0 1 2 3 4 5

Strings - Exemplo #include <stdio.h> #include <string.h> main() { char s1[80], s2[80]; unsigned int i; printf("Informe duas palavras\n"); gets(s1); gets(&s2[0]); printf("Tamanhos: s1=%d \t s2=%d \n",strlen(s1), strlen(s2)); printf("\nString 1 \n"); for (i=0; i<strlen(s1); i++) printf("Letra %d: %c \n",i+1,s1[i]); printf("\nString 2 \n"); for (i=0; i<strlen(s2); i++) printf("Letra %d: %c \n",i+1,*(s2+i)); strcat(s1,s2); puts(s1); }

Vetor de Strings #include <stdio.h> main() { char vet[4][50]; int i; for (i=0;i<4;i++) gets(vet[i]); printf("%s \n",vet[i]); }

Exercícios Lista de Exercícios: Vetor, String e Matriz