Linguagem C Agradecimentos
TÉCNICAS DE PROGRAMAÇÃO I
Prof.John Hebert da Silva Felix
johnfelix@unilab.edu.br
Universidade da Integração Internacional da Lusofonia
Afro-Brasiliera
Curso de Engenharia de Energias
Redenção-CE, Brasil
2014
Prof. John Hebert S. Felix 1/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Índice da Apresentação
1 Linguagem C
Linguagem C
Prof. John Hebert S. Felix 2/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
LINGUAGEM C
Prof. John Hebert S. Felix 3/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Linguagem C
1 Introdução;
2 A Biblioteca-padrão e as Palavras Reservadas em C;
3 Tipos de Dados e Variáveis;
4 Operadores e Expressões;
5 Entrada e Saída E/S pelo Console;
6 Estruturas de Controles;
7 Funções;
8 Arrays e Strings;
9 Ponteiros;
10 Estruturas, Uniões e Enumerações;
11 Arquivos e Streams;
12 Estruturas de dados:
Listas lineares (Filas, Pilhas e Listas Encadeadas);
Ordenação e Pesquisa.
Prof. John Hebert S. Felix 4/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Ponteiros
Chama-se de ponteiro uma variável que contém um endereço de
memória. Em geral, tal endereço corresponde a posição de outra
variável na memória;
Uma variável contém um valor, enquanto o ponteiro faz uma
referência indireta a este valor, apontando para o endereço de
memória desta variável;
Os ponteiros permitem realizar chamada por referência, bem
como criar e manipular estruturas de dados dinâmicas (que
aumentam e diminuem durante a execução), e.g., pilhas e filas.
Prof. John Hebert S. Felix 5/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Ponteiros
Chama-se de ponteiro uma variável que contém um endereço de
memória. Em geral, tal endereço corresponde a posição de outra
variável na memória;
Uma variável contém um valor, enquanto o ponteiro faz uma
referência indireta a este valor, apontando para o endereço de
memória desta variável;
Os ponteiros permitem realizar chamada por referência, bem
como criar e manipular estruturas de dados dinâmicas (que
aumentam e diminuem durante a execução), e.g., pilhas e filas.
Prof. John Hebert S. Felix 5/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Ponteiros
Chama-se de ponteiro uma variável que contém um endereço de
memória. Em geral, tal endereço corresponde a posição de outra
variável na memória;
Uma variável contém um valor, enquanto o ponteiro faz uma
referência indireta a este valor, apontando para o endereço de
memória desta variável;
Os ponteiros permitem realizar chamada por referência, bem
como criar e manipular estruturas de dados dinâmicas (que
aumentam e diminuem durante a execução), e.g., pilhas e filas.
Prof. John Hebert S. Felix 5/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Ponteiros
Chama-se de ponteiro uma variável que contém um endereço de
memória. Em geral, tal endereço corresponde a posição de outra
variável na memória;
Uma variável contém um valor, enquanto o ponteiro faz uma
referência indireta a este valor, apontando para o endereço de
memória desta variável;
Os ponteiros permitem realizar chamada por referência, bem
como criar e manipular estruturas de dados dinâmicas (que
aumentam e diminuem durante a execução), e.g., pilhas e filas.
Prof. John Hebert S. Felix 5/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Sintaxe - declaração de um ponteiro
tipo *nome_do_ponteiro;
Ex.: int *numb;
Ponteiros
Os operadores & e ⇤ são unários. O primeiro operador & retorna o endereço
na memória de seu operando. Este é chamado de operador de endereço. O
segundo operador ⇤ é o complemento de & e retorno o valor da variável
localizada no endereço que o segue. Este é chamado de operador de
indireção.
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Atribuição de ponteiros
#include <stdio.h>
int main (void){
int valor, aux;
int *endereco;
aux = 10;
endereco = &aux;
valor = *endereco;
printf(“O endereço é:%dn”, endereco);
printf(“O valor é:%dn”, valor);
return 0;
}
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Ponteiros em argumentos de funções - Chamada por referência
#include <stdio.h>
int quadrado(int *a); //protótipo de função
int main (void){
int num = 9;
printf(“O quadrado de %dn”, num);
printf(“é: %dn”, quadrado(&num));
return 0;
} //Funções
int quadrado(int *a) {
*a = *a * *a;
}
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Ponteiros - operador sizeof
O operador sizeof retorna o valor em bytes de uma variável.
Ex.:
sizeof(int); //Aplicando sizeof em um tipo de dado
sizeof(vetor); //Aplicando sizeof em uma variável
Ex.: operador sizeof
#include <stdio.h>
int main (void){
float vet1[10];
double vet2[10];
printf(“O número de bytes de vet1 = %d e vet2 = %d.n”, sizeof(vet1),
sizeof(vet2));
return 0;
}
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Expressões e aritmética de ponteiros
Em ponteiros, as expressões utilizam a mesma regra que qualquer outra
expressão em C.
As operações aritméticas em C são: adição e subtração.
Os operadores são incrementados e decrementados de acordo com o tipo de
dado, apontando sempre para o próximo elemento, e.g., supondo que um
caractere pode ser armazenado em um 1 byte e um inteiro em 2 bytes, quando
este são incrementados ou decrementados, aumentam ou diminuem de 1 em 1
para o caractere e de 2 em 2 para o inteiro.
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Expressões e aritmética de ponteiros
Definindo o array vet[6], o seu primeiro elemento está no endereço de memória
1000. Para inicializar o vetor de ponteiros vetPt na primeira posição de vet
pode ser utilizado uma das seguintes formas: vetPt = vet; ou vetPt = &vet[0];
Na Figura a seguir é mostrado este exemplo.
Figura 1 : Variável de ponteiro vetPt que aponta para o array vet.
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Relação entre ponteiros e arrays
Existe uma estreita relação entre arrays e ponteiros. Há duas formas de
acessar elementos de um arrays, a saber: aritmética de ponteiros e indexação
de arrays. A primeira é realizada com mais velocidade, quando comparada
com a segunda.
Ex.: Aritmética de ponteiros e indexação de arrays
//Realiza o acesso de texto com um índice
void mostra(char *texto) {
int tx;
for(tx = 0; texto[tx]; ++tx) putchar(texto[tx]);
}
//Realiza o acesso de texto como um ponteiro
void mostra(char *texto) {
while(*texto) putchar(*texto++);
}
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Arrays de ponteiros
Existe uma estreita relação entre arrays e ponteiros. Há duas formas de
acessar os elementos de um arrays, a saber: aritmética de ponteiros e
indexação de arrays. A primeira é realizada com mais velocidade, quando
comparada com a segunda.
Sintaxe - declaração de um arrays de ponteiro
tipo *nome_do_ponteiro[tamanho];
Ex.: int *vt[10];
vt[3]= &vr; //atribui o endereço de vr (do tipo int) no 4o
elemento de vt.
*vt[3] //apresenta o valor que estar em tal endereço.
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I
Linguagem C Agradecimentos
Ponteiros
Alocação dinâmica
Permite que o programa obtenha memória durante a sua execução. As
funções utilizadas são: malloc() (aloca a memória) e free() (a libera). Para
utilizar estas funções deve ser incluido o cabeçalho stdlib.h.
Sintaxe - malloc() e free()
void malloc(size_t número_de_bytes);
Em que: size_t é definido pelo cabeçalho stdlib.h e número_de_bytes é o número de bytes de
memória que deseja alocar.
void free(void *p);
Em que: p corresponde a um ponteiro para memória alocado antes por malloc().
Ex.:
int *vr;
vr = malloc(50*sizeof(int)) //sizeof assegura a portabilidade para outros S.O.
free(vr);
Prof. John Hebert S. Felix 6/7 UNILAB
Técnicas de Programação I

Tecnicas programacao i_c_p4

  • 1.
    Linguagem C Agradecimentos TÉCNICASDE PROGRAMAÇÃO I Prof.John Hebert da Silva Felix johnfelix@unilab.edu.br Universidade da Integração Internacional da Lusofonia Afro-Brasiliera Curso de Engenharia de Energias Redenção-CE, Brasil 2014 Prof. John Hebert S. Felix 1/7 UNILAB Técnicas de Programação I
  • 2.
    Linguagem C Agradecimentos Índiceda Apresentação 1 Linguagem C Linguagem C Prof. John Hebert S. Felix 2/7 UNILAB Técnicas de Programação I
  • 3.
    Linguagem C Agradecimentos LINGUAGEMC Prof. John Hebert S. Felix 3/7 UNILAB Técnicas de Programação I
  • 4.
    Linguagem C Agradecimentos LinguagemC 1 Introdução; 2 A Biblioteca-padrão e as Palavras Reservadas em C; 3 Tipos de Dados e Variáveis; 4 Operadores e Expressões; 5 Entrada e Saída E/S pelo Console; 6 Estruturas de Controles; 7 Funções; 8 Arrays e Strings; 9 Ponteiros; 10 Estruturas, Uniões e Enumerações; 11 Arquivos e Streams; 12 Estruturas de dados: Listas lineares (Filas, Pilhas e Listas Encadeadas); Ordenação e Pesquisa. Prof. John Hebert S. Felix 4/7 UNILAB Técnicas de Programação I
  • 5.
    Linguagem C Agradecimentos Ponteiros Ponteiros Chama-sede ponteiro uma variável que contém um endereço de memória. Em geral, tal endereço corresponde a posição de outra variável na memória; Uma variável contém um valor, enquanto o ponteiro faz uma referência indireta a este valor, apontando para o endereço de memória desta variável; Os ponteiros permitem realizar chamada por referência, bem como criar e manipular estruturas de dados dinâmicas (que aumentam e diminuem durante a execução), e.g., pilhas e filas. Prof. John Hebert S. Felix 5/7 UNILAB Técnicas de Programação I
  • 6.
    Linguagem C Agradecimentos Ponteiros Ponteiros Chama-sede ponteiro uma variável que contém um endereço de memória. Em geral, tal endereço corresponde a posição de outra variável na memória; Uma variável contém um valor, enquanto o ponteiro faz uma referência indireta a este valor, apontando para o endereço de memória desta variável; Os ponteiros permitem realizar chamada por referência, bem como criar e manipular estruturas de dados dinâmicas (que aumentam e diminuem durante a execução), e.g., pilhas e filas. Prof. John Hebert S. Felix 5/7 UNILAB Técnicas de Programação I
  • 7.
    Linguagem C Agradecimentos Ponteiros Ponteiros Chama-sede ponteiro uma variável que contém um endereço de memória. Em geral, tal endereço corresponde a posição de outra variável na memória; Uma variável contém um valor, enquanto o ponteiro faz uma referência indireta a este valor, apontando para o endereço de memória desta variável; Os ponteiros permitem realizar chamada por referência, bem como criar e manipular estruturas de dados dinâmicas (que aumentam e diminuem durante a execução), e.g., pilhas e filas. Prof. John Hebert S. Felix 5/7 UNILAB Técnicas de Programação I
  • 8.
    Linguagem C Agradecimentos Ponteiros Ponteiros Chama-sede ponteiro uma variável que contém um endereço de memória. Em geral, tal endereço corresponde a posição de outra variável na memória; Uma variável contém um valor, enquanto o ponteiro faz uma referência indireta a este valor, apontando para o endereço de memória desta variável; Os ponteiros permitem realizar chamada por referência, bem como criar e manipular estruturas de dados dinâmicas (que aumentam e diminuem durante a execução), e.g., pilhas e filas. Prof. John Hebert S. Felix 5/7 UNILAB Técnicas de Programação I
  • 9.
    Linguagem C Agradecimentos Ponteiros Sintaxe- declaração de um ponteiro tipo *nome_do_ponteiro; Ex.: int *numb; Ponteiros Os operadores & e ⇤ são unários. O primeiro operador & retorna o endereço na memória de seu operando. Este é chamado de operador de endereço. O segundo operador ⇤ é o complemento de & e retorno o valor da variável localizada no endereço que o segue. Este é chamado de operador de indireção. Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 10.
    Linguagem C Agradecimentos Ponteiros Atribuiçãode ponteiros #include <stdio.h> int main (void){ int valor, aux; int *endereco; aux = 10; endereco = &aux; valor = *endereco; printf(“O endereço é:%dn”, endereco); printf(“O valor é:%dn”, valor); return 0; } Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 11.
    Linguagem C Agradecimentos Ponteiros Ponteirosem argumentos de funções - Chamada por referência #include <stdio.h> int quadrado(int *a); //protótipo de função int main (void){ int num = 9; printf(“O quadrado de %dn”, num); printf(“é: %dn”, quadrado(&num)); return 0; } //Funções int quadrado(int *a) { *a = *a * *a; } Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 12.
    Linguagem C Agradecimentos Ponteiros Ponteiros- operador sizeof O operador sizeof retorna o valor em bytes de uma variável. Ex.: sizeof(int); //Aplicando sizeof em um tipo de dado sizeof(vetor); //Aplicando sizeof em uma variável Ex.: operador sizeof #include <stdio.h> int main (void){ float vet1[10]; double vet2[10]; printf(“O número de bytes de vet1 = %d e vet2 = %d.n”, sizeof(vet1), sizeof(vet2)); return 0; } Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 13.
    Linguagem C Agradecimentos Ponteiros Expressõese aritmética de ponteiros Em ponteiros, as expressões utilizam a mesma regra que qualquer outra expressão em C. As operações aritméticas em C são: adição e subtração. Os operadores são incrementados e decrementados de acordo com o tipo de dado, apontando sempre para o próximo elemento, e.g., supondo que um caractere pode ser armazenado em um 1 byte e um inteiro em 2 bytes, quando este são incrementados ou decrementados, aumentam ou diminuem de 1 em 1 para o caractere e de 2 em 2 para o inteiro. Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 14.
    Linguagem C Agradecimentos Ponteiros Expressõese aritmética de ponteiros Definindo o array vet[6], o seu primeiro elemento está no endereço de memória 1000. Para inicializar o vetor de ponteiros vetPt na primeira posição de vet pode ser utilizado uma das seguintes formas: vetPt = vet; ou vetPt = &vet[0]; Na Figura a seguir é mostrado este exemplo. Figura 1 : Variável de ponteiro vetPt que aponta para o array vet. Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 15.
    Linguagem C Agradecimentos Ponteiros Relaçãoentre ponteiros e arrays Existe uma estreita relação entre arrays e ponteiros. Há duas formas de acessar elementos de um arrays, a saber: aritmética de ponteiros e indexação de arrays. A primeira é realizada com mais velocidade, quando comparada com a segunda. Ex.: Aritmética de ponteiros e indexação de arrays //Realiza o acesso de texto com um índice void mostra(char *texto) { int tx; for(tx = 0; texto[tx]; ++tx) putchar(texto[tx]); } //Realiza o acesso de texto como um ponteiro void mostra(char *texto) { while(*texto) putchar(*texto++); } Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 16.
    Linguagem C Agradecimentos Ponteiros Arraysde ponteiros Existe uma estreita relação entre arrays e ponteiros. Há duas formas de acessar os elementos de um arrays, a saber: aritmética de ponteiros e indexação de arrays. A primeira é realizada com mais velocidade, quando comparada com a segunda. Sintaxe - declaração de um arrays de ponteiro tipo *nome_do_ponteiro[tamanho]; Ex.: int *vt[10]; vt[3]= &vr; //atribui o endereço de vr (do tipo int) no 4o elemento de vt. *vt[3] //apresenta o valor que estar em tal endereço. Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I
  • 17.
    Linguagem C Agradecimentos Ponteiros Alocaçãodinâmica Permite que o programa obtenha memória durante a sua execução. As funções utilizadas são: malloc() (aloca a memória) e free() (a libera). Para utilizar estas funções deve ser incluido o cabeçalho stdlib.h. Sintaxe - malloc() e free() void malloc(size_t número_de_bytes); Em que: size_t é definido pelo cabeçalho stdlib.h e número_de_bytes é o número de bytes de memória que deseja alocar. void free(void *p); Em que: p corresponde a um ponteiro para memória alocado antes por malloc(). Ex.: int *vr; vr = malloc(50*sizeof(int)) //sizeof assegura a portabilidade para outros S.O. free(vr); Prof. John Hebert S. Felix 6/7 UNILAB Técnicas de Programação I