A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Ponteiros. 2 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.

Apresentações semelhantes


Apresentação em tema: "1 Ponteiros. 2 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."— Transcrição da apresentação:

1 1 Ponteiros

2 2 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

3 3 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 * ; Exemplo: int *p; – cria uma variável p que pode armazenar um endereço de memória onde exista um inteiro armazenado

4 4 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

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

6 6 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 = # /* conteúdo de p recebe o valor 8 */ *p = 8; p num p num p num

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

8 8 Erros Comuns com Ponteiros int main( ) { int a, b, *p; a = 2; *p = a; b = a + (*p); printf(" %d ", b); } 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!

9 9 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.

10 10 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!

11 11 Vetores

12 12 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

13 13 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)

14 14 Vetores Declaração: [ ]; Um elemento pode ser acessado por indexação: [ ] Se estiver fora do domínio implica em erro, detectado em tempo de execução

15 15 Vetores O primeiro elemento tem sempre índice zero e o último tem índice -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]

16 16 Vetores - Exemplo /* Cálculo da média e variância de 8 números reais */ #include 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); }

17 17 Vetores - Exemplo /* Verificar a existência de um número no vetor */ #include 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); for (i=0 ; i<8; i++) if (num == v[i]) cont++; if (cont) printf("Número existe \n"); else printf("Número NÃO existe \n"); }

18 18 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};

19 19 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]

20 20 Vetores & Ponteiros - Exemplo /* Verificar a existência de um número no vetor */ #include 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); for (i=0 ; i<8; i++) if (num == *(v+i)) cont++; if (cont) printf("Numero existe\n"); else printf("Numero NAO existe\n"); }

21 21 Agregados Homogêneos - Matrizes Declaração: [ ] [ ]; matriz 10 x 5 vetor de 2 dimensões int mat[10][5];

22 22 Seqüências 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

23 23 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

24 24 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 – requerem: #include

25 25 String Strings de Caracteres – CUIDADOS ESPECIAIS char nome[5]; strcpy(nome, Maria); MARIA\ Nome possui 5 posições Índices de 0 a 4

26 26 Strings - Exemplo #include 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

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

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


Carregar ppt "1 Ponteiros. 2 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."

Apresentações semelhantes


Anúncios Google