O documento apresenta um curso sobre a linguagem C ministrado pelo professor John Hebert da Silva Felix na Universidade da Integração Internacional da Lusofonia Afro-Brasiliera. O curso inclui tópicos como tipos de dados, variáveis, operadores, entrada e saída, estruturas de controle, funções, arrays, strings, ponteiros, arquivos, estruturas de dados e ordenação.
1. 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
2. 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
4. 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
5. 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
6. 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
7. 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
8. 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
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çã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
11. 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
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õ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
14. 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
15. 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
16. 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
17. 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