Você está na página 1de 14

Introduo Linguagem C

A linguagem C surgiu na dcada de 1970 e foi inventada por Dennis Ritchie, rodando o sistema
operacional Unix.

Linguagem que pode ser usada em programao de baixo e alto nvel.

Linguagem de programao genrica, o que permite cria diversos tipos de aplicaes.

Existem diversas implementaes da linguagem C.

possvel utilizar diversos ambientes de desenvolvimento.


Caractersticas da linguagem

A linguagem C case sensitive.

A linguagem C compilada.

exemplo01.c

Estrutura geral de um programa em C.

A linguagem C possui um conjunto de palavras-reservadas.

Tabela das palavras-reservadas da linguagem:


auto

double

int

struct

break

else

long

switch

case

enum

register

typedef

char

extern

return

union

const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

Tipos de dados

A linguagem C possui 5 tipos de dados: char, int, float, void, double.

Caracteres

char

Representa caracteres ou valores numricos.

Tamanho da representao de 1 byte ou 8 bits de informao.

Inteiros

int

Representa 2 ou 4 bytes.

Nmeros em ponto flutuante (reais)

float

double (o dobro da preciso do tipo float)

Void um tipo especial e serve para indicar que o tipo vazio.

Existem quatro tipos de modificadores para os tipos: signed, unsigned, long e short.

Tiago Eugenio de Melo www.tiagodemelo.info

Tipo
char
unsigned char
signed char
int
unsigned int
signed int
short int
unsigned short int
signed short int
long int
signed long int
unsigned long int
float
double
long double

Formato
Num de bits para leitura
com scanf
8
8
8
16
16
16
16
16
16
32
32
32
32
64
80

%c
%c
%c
%i
%u
%i
%hi
%hu
%hi
%li
%li
%lu
%f
%lf
%Lf

Intervalo
Inicio

Fim

-128
0
-128
-32.768
0
-32.768
-32.768
0
-32.768
-2.147.483.648
-2.147.483.648
0
3,4E-38
1,7E-308
3,4E-4932

127
255
127
32.767
65.535
32.767
32.767
65.535
32.767
2.147.483.647
2.147.483.647
4.294.967.295
3.4E+38
1,7E+308
3,4E+4932

Nomes de variveis

Regras para criao dos nomes das variveis:

O nome das variveis deve comear com uma letra ou um sublinhado (_).

O nome da varivel no pode ser igual a uma das palavras-reservadas e nem igual ao nome
de uma funo declarada pelo programador ou pelas bibliotecas C.
Declarao e inicializao de variveis

Forma padro de declarar variveis: <tipo-varivel> <nome-ou-lista-variveis>;

As variveis podem ser declaradas como locais, globais ou na lista de parmetros.

possvel inicializar a varivel no momento da sua declarao.


Constantes

So valores que no so alterados ao longo da execuo dos programas.

Para indicar que um nmero est numa base diferente da decimal, utilize 0X para indicar que o
nmero hexadecimal e 0 para indicar que est na base octal.
Operadores aritmticos

Relao dos principais operadores aritmticos em C:


Operador
+
*
/
%
++
--

Ao
Soma (inteira e ponto flutuante)
Subtrao ou Troca de sinal (inteira e ponto flutuante)
Multiplicao (inteira e ponto flutuante)
Diviso (inteira e ponto flutuante)
Resto de diviso (de inteiros)
Incremento (inteiro e ponto flutuante)
Decremento (inteiro e ponto flutuante)

Tiago Eugenio de Melo www.tiagodemelo.info

Os operadores ++ e -- podem ser pr-fixados e ps-fixados e existe diferena entre eles. Os


operadores pr-fixados incrementam e depois retornam o valor da varivel j incrementada. Os
operadores ps-fixados retornam o valor da varivel sem o incremento e depois incrementam a
varivel.

Exemplo: x=23; y=x++; e x=23; y=++x;

No primeiro teremos y igual a 23 e x igual a 24. No segundo teremos y igual a 24 e x igual a


24.
O operador = utilizado para atribuio de valores.

Operadores relacionais e lgicos

Relao dos principais operadores relacionais em C:


Operador
>
>=
<
<=
==
!=

Ao
Maior do que
Maior ou igual a
Menor do que
Menor ou igual a
Igual a
Diferente de

Os operadores relacionais retornam verdadeiro (1) e falso (0).


Relao dos principais operadores lgicos em C:
Operador
&&
||
!

Ao
AND (E)
OR (OU)
NOT (NO)

Comandos de entrada e sada de dados

Leitura e escrita de caracteres

O comando getchar( ) utilizado para ler um caracter a partir do teclado.

Prottipo do comando: int getchar(void)

O comando putchar( ) utilizado para escrever um caracter na tela.

Prottipo do comando: int putchar(int c)

Leitura e escrita de strings

O comando gets utilizado para ler uma string a partir do teclado.

Prottipo: char *gets (char *s)

O comando puts utilizado para escrever uma string na tela.

Prottipo: int puts (char *s)

exemplo-ler-escrever-string.c

Escrita de valores

O comando printf utilizado para imprimir valores na tela.

Prottipo: int printf (char *str, ...)

Relao de possveis formatos:

Tiago Eugenio de Melo www.tiagodemelo.info

Cdigo
%c
%d
%i
%e
%E
%f
%g
%G
%o
%s
%u
%x
%X
%%
%p

Formato
Um caracter (char)
Um nmero inteiro decimal (int)
O mesmo que %d
Nmero em notao cientfica com o "e"minsculo
Nmero em notao cientfica com o "e"maisculo
Ponto flutuante decimal
Escolhe automaticamente o melhor entre %f e %e
Escolhe automaticamente o melhor entre %f e %E
Nmero octal
String
Decimal "unsigned" (sem sinal)
Hexadecimal com letras minsculas
Hexadecimal com letras maisculas
Imprime um %
Ponteiro

possvel tambm indicar o nmero de casas decimais de um nmero em ponto flutuante.


Exemplo: %10.4f

Leitura de valores

O comando scanf utilizado para a leitura de valores a partir do teclado.

Prottipo: int scanf (char *str, ...);

Necessidade do operador & para as variveis que no sejam ponteiros.

Relao dos formatos possveis de leitura:


Cdigo

Formato

%c

Um nico caracter (char)

%d

Um nmero decimal (int)

%i

Um nmero inteiro

%hi

Um short int

%li

Um long int

%e

Um ponto flutuante

%f

Um ponto flutuante

%lf

Um double

%h

Inteiro curto

%o

Nmero octal

%s

String

%x

Nmero hexadecimal

%p

Ponteiro

exemplo-printf-scanf.c

Tiago Eugenio de Melo www.tiagodemelo.info

Comandos condicionais

Os comandos condicionais so comandos que avaliam expresses e tomam decises a respeito


do que deve ser executado a partir de uma avaliao feita.

Comando if...else

No h necessidade de chaves se houver um nico comando.

exemplo-maior-valor.c

Uma outra opo usar o comando ?

Sintaxe: (expresso) ? (operao verdadeira) : (operao falsa)

Comando switch...case

outro comando de controle de fluxo.

Sintaxe:
switch (expresso) {
case x:
lista de operaes;
break;
case y:
lista de operaes;
break;
default:
lista de operaes;
}

A lista de operaes do comando default ser executada por padro, a menos que algum caso
(case) anterior seja executado e exista um comando break para encerrar o fluxo. Se no
existir o comando break, o comando default sempre ser executado.

O comando default e break no so obrigatrios.

Apesar da similaridade com o comando condicional if, o comando switch possui duas
diferenas importantes e que devem ser destacadas. A primeira diferena que no
possvel utilizar operaes lgicas no local da expresso. Por exemplo, no possvel
verificar se um determinado valor maior ou igual a outro valor. Uma segunda diferena
que merece destaque que o comando switch executa em cascata, ou seja, se a varivel da
expresso for igual ao primeiro caso, e dentro do comando switch houver outros casos, estes
sero tambm executados, independentemente do valor dos demais casos. A exceo para
isso quando ocorrer um comando break dentro de algum dos casos. Essa a razo para o
comando default ser sempre executado, a menos que aparea algum comando break anterior.

exemplo-switch-case.c
Comandos de laos (loop)

A linguagem C possui trs comandos de laos de repetio: for, while e do...while.

Comando for

O comando for um lao de repetio normalmente utilizado quando se conhece


previamente o nmero de iteraes.

Sintaxe:
for (inicializao; critrio de parada; incremento ou decremento) {
lista de operaes;
}

exemplo-comando-for.c

Exemplo de uso do comando for:

for (i=0;i<1000000;i++);

utilizado para fazer atrasos nos programas.

Comando while

Diferentemente do comando for, o comando while no apresenta condio inicial e nem


Tiago Eugenio de Melo www.tiagodemelo.info

controle de incremento/decremento.

Sintaxe:
while (condio) {
lista de operaes;
}

exemplo-comando-while.c
Comando do-while

Sintaxe:
do {
lista de operaes;
} while (condio);

exemplo-comando-do-while.c
Comando continue

O comando utilizado dentro de laos de repetio para finalizar apenas a execuo da


iterao, pulando todos os demais comandos dele.

exemplo-comando-continue.c
Comando break

O comando pode ser utilizado dentro de laos de repetio para finalizar a execuo do lao,
pulando todos os demais comandos e no considerando a prpria condio de parada.

exemplo-comando-break.c

Operaes matemticas

As operaes matemticas mais avanadas so estabelecidas dentro da biblioteca math.h.

Assim, sempre que necessitar dessas operaes, deve-se declarar no incio do programa.
#include <math.h>

Entre as funes matemticas, possvel utilizar operaes trigonomtricas, hiperblicas,


exponenciais, logartmicas, entre outras.
Funo de potncia

A funo pow realiza a exponenciao de um nmero por outro.

Esta funo retorna um valor tipo double e seus argumentos tambm so double.

A sua sintaxe : pow (base, expoente).


Funo de raiz quadrada

Embora seja possvel calcular a raiz quadrada de um nmero, utilizando o expoente com o
valor 0,5, a linguagem C possui uma funo prpria, que o comando sqrt ( ).

A sua sintaxe : sqrt (valor)

O valor passado tambm deve ser do tipo double.


Funo de arredondamento

A funo de arredondamento ceil ( ).

A sua sintaxe : ceil (valor)

Esta funo recebe um valor do tipo double como parmetro e retorna um valor
arredondado. Por exemplo, se x = ceil (3.2), o valor de x passar a ser 4.
Funo de truncamento

A funo de truncamento de nmeros em C o comando floor ( ).

A sua sintaxe : floor (valor)

Esta funo recebe um valor do tipo double como parmetro e retorna um valor truncado.
Por exemplo, se x = floor (3.2), o valor de x passar a ser 3.
exemplo-funcoes-matematicas.c
Funo de nmero

A linguagem C possui duas funes para calcular o valor absoluto de um nmero. A funo
Tiago Eugenio de Melo www.tiagodemelo.info

abs (valor) e a funo fabs (valor). A diferena que a primeira utilizada para calcular
valores absolutos do tipo double e a segunda utilizada para calcular valores absolutos para
o tipo inteiro.
Funes para gerao de nmeros aleatrios

Existem situaes em que necessrio gerar nmeros aleatrios.

A linguagem C possui o comando rand( ) para gerar nmeros aleatrios. A funo retorna
um valor inteiro entre 0 e RAND_MAX, em que RAND_MAX o maior valor que pode ser
obtido por essa funo. Este valor definido em stlib.h.

Quando se deseja limitar o valor mximo de rand, utiliza-se a seguinte declarao: rand( ) %
k; com k sendo um nmero inteiro que determina o valor teto para os nmeros gerados.

exemplo-numero-randomicos.c

Ponteiros

Ponteiros so tipos especiais em C que servem para armazenar endereos de memria.

Os ponteiros tambm possuem um tipo, pois ao armazenar o endereo, preciso identificar qual
o tipo de valor que ser armazenado.

Sintaxe: <tipo-ponteiro> *<nome-varivel>;

O asterisco indica ao compilador que a varivel no ir guardar um valor, mas apenas um


endereo especificado.

possvel tambm descobrir o valor do endereo de uma varivel. Para isso, basta usar o
operador & antes da varivel para pegar o endereo.

Trecho de exemplo:
int valor = 10;
int *pt;
pt = &valor;

exemplo-ponteiro-01.c
Cuidado no uso de ponteiros

O principal cuidado do programador no uso de ponteiros saber para onde ele est
apontando, ou seja, nunca utilize um ponteiro que no foi inicializado.

Os ponteiros sempre devem ser inicializados com um endereo de memria, com 0 (zero) ou
com a palavra-reservada NULL.

exemplo-ponteiros-06.c
possvel tambm realizar operaes de incremento e decremento com os ponteiros. Quando
incrementamos um ponteiro ele passa a apontar para o prximo valor do mesmo tipo para o qual
o ponteiro aponta. Ou seja, se temos um ponteiro para um inteiro e o incrementamos ele passa a
apontar para o prximo inteiro. Esta a razo pela qual o compilador precisa saber o tipo de um
ponteiro.
A operao de decremento funciona de forma semelhante, mas com a diminuio dos endereos.
Exemplo de incremento de ponteiro: p++
Vale dizer que p++ diferente de (*p)++. O primeiro representa um incremento no endereo do
ponteiro p e o segundo representa um aumento do contedo do ponteiro p.
exemplo-ponteiros-02.c
A operao de subtrao funciona de maneira semelhante operao de soma.
possvel tambm realizar operaes relacionais entre ponteiros. Por exemplo, possvel
verificar se dois ponteiros tm o endereos iguais (==) ou diferentes (!=). Ainda possvel
verificar se o endereo de um ponteiro maior (>) ou menor (<) que o endereo de outro
ponteiro. Um ponteiro maior que o outro significa que aquele est direita, enquanto que um
ponteiro menor do que o outro significa que aquele est esquerda deste.
Verificao de aprendizado:
Tiago Eugenio de Melo www.tiagodemelo.info

Explique a diferena entre: p++; (*p)++; *(p++);


Ponteiros para ponteiros

Um ponteiro para ponteiro guardar o endereo de um ponteiro, sendo que este guarda o
endereo de uma varivel. Ou seja, um ponteio para ponteiro guardar um endereo que
aponta para outro endereo.

Sintaxe: <tipo-varivel>
**<nome-ponteiro>;

No existe limitao desse recurso, ou seja, possvel que ponteiro aponte para outro e este
aponte para outro ponteiro. Poderamos ter uma quantidade indeterminada de referncias de
ponteiros.

exemplo-ponteiros-05.c
Ponteiros ainda so normalmente utilizados para manipular strings e vetores/matrizes. Isto ser
detalhado mais adiante.

Vetores e Matrizes

Vetores nada mais so do que matrizes unidimensionais.

Vetores e matrizes so estruturas de dados homogneas porque todos os elementos que possuem
so do mesmo tipo.

Sintaxe de vetor: <tipo-varivel>


<nome-varivel> [tamanho];

O compilador reserva um espao de memria suficiente para armazenar toda a estrutura.

A numerao comea sempre em zero.

Strings

Strings so vetores de caracteres.

O ltimo elemento da string possui o valor '\0' ou o valor NULL.

Sintaxe de string: char <nome-string> [tamanho];

Existem diversas funes em C para manipular strings. Essas funes esto disponveis na
biblioteca <string.h>.

Comparao entre duas strings

No possvel comparar duas strings atravs do sinal de igualdade (==), pois strings
podem ser entendidos como vetores de caracteres em C. Para fazer a comparao
necessrio usar a funo strcmp.

Sintaxe: strcmp (string1, string2);

A funo strcmp retorna 0 se as strings forem idnticas, retorna um valor negativo se o


primeiro argumento for menor que o segundo argumento e retorna um valor positivo se o
primeiro argumento for maior que o segundo argumento.

exemplo-strcmp.c

Cpia de uma string

A cpia de uma string deve ser feita atravs da funo strcpy.

Sintaxe: strcpy (destino, origem);

exemplo-strcpy.c

Concatenao entre strings

A funo strcat utilizada para concatenar duas strings.

Sintaxe: strcat (destino, origem);

A string permanecer inalterada e ser anexada ao final da string de destino.

exemplo-strcat.c

Tamanho de uma string

A funo strlen retorna o tamanho de uma string (quantidade de caracteres).

O terminador no considerado ('\0').

exemplo-strlen.c

Matrizes

A forma de declarao de matrizes bidimensionais bastante parecido com a declarao de


vetores.
Tiago Eugenio de Melo www.tiagodemelo.info

Sintaxe: <tipo-varivel> <nome-varivel> [num-linhas] [num-colunas];

exemplo-maior-elemento-matriz.c

As matrizes em C podem ter mais de duas dimenses (multidimensionais).

Sintaxe: <tipo-varivel> <nome-varivel> [tam1] [tam2] [tamN];

As matrizes, assim como os vetores, podem ser inicializados diretamente. Exemplos:

float vet [3] = {1.2, 3.4, 5.7};

int mat [2] [3] = {1, 2, 3, 4, 5, 6};

char vet [4] = {'c', 'a', 's', 'a', '\0'};

char vet [4] = {casa};

possvel tambm inicializar as matrizes, assim como os vetores, sem especificar o


tamanho dessas estruturas. Por exemplo:

char vet [ ] = casa;

int mat [ ] [2] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};


Matrizes (vetores) e ponteiros

O nome da varivel que utilizada na declarao , na verdade, um ponteiro para o tipo da


varivel da matriz. como se a varivel fosse um ponteiro apontando para o primeiro
elemento do vetor.

Assim, o vetor pode ser acessado como vet[posicao] ou *(vet + posicao).

Isso justifica o fato dos vetores comearem em zero, ou seja, *vet equivalente a vet[0].

Exemplo vantagem no uso de ponteiros para manipulao de matrizes:

exemplo-ponteiros-matriz.c

importante destacar que o ponteiro uma varivel, mas o nome de um vetor no uma
varivel, no sendo possvel realizar operaes como: vet = vet + 2 ou vet++;

O nome de um vetor um ponteiro constante.

exemplo-ponteiro-vetor.c

Nesse exemplo possvel perceber que pt[2] equivalente a *(p+2).

A declarao &vet [indice] vlida e retorna o endereo do elemento na posicao do indice,


ou seja, o ponteiro vet tem o endereo &vet[0].

possvel tambm criar vetores de ponteiros. Por exemplo, a declarao int *vetpt [10]
um vetor que armazena 10 ponteiros para o tipo inteiro.
Strings e ponteiros

As variveis que representam strings em C, na verdade, vetores de caracteres, podem


tambm ser manipulados atravs de ponteiros de caracteres (tipo char*).

exemplo-string-ponteiro01.c

exemplo-string-ponteiro02.c

Funes

Uma funo um bloco de cdigo de programa que pode ser usado diversas vezes em sua
execuo.

Forma geral:
<tipo-retorno> <nome-funo> (<lista-argumentos>) {
lista de comandos;
}

Argumentos so as entradas que uma funo recebe.

Scanf e printf so exemplos de funes que tm argumentos de entrada.

exemplo-funcao01.c

Retorno de funes

A Linguagem C no faz distino entre funes e procedimentos, pois em C existe apenas


funes.

Se no for especificado o tipo de retorno, o compilador C entende que o tipo de retorno ser
Tiago Eugenio de Melo www.tiagodemelo.info

inteiro.

main( ) a funo principal de qualquer programa em C e o seu retorno sempre ser um


valor inteiro.

O valor de retorno de uma funo deve ser compatvel com o tipo de retorno declarada para
a funo.

O comando return indica o valor que a funo ir retornar.

exemplo-funcao-produto.c

O comando return na funo main indica a finalizao do programa.

possvel ter mais de um return em uma mesma funo.

exemplo-varios-returns.c
Tipo void

O tipo void pode ser utilizado nas funes que no retornam valores ou que no possuem
parmetros de entrada.

A funo main tambm pode ser do tipo void.


Prottipos de funes

Prottipos de funes so declaraes de funes, sem que haja uma implementao.

A sintaxe do prottipo: <tipo-retorno> <nome-funcao> (<lista-parmetros>);

exemplo-prototipo-funcao.c
Bibliotecas em C

As bibliotecas em C so arquivos com a extenso .h ou tambm conhecidos como arquivos


de cabealho.

Os arquivos de cabealho so referenciados no incio do programa atravs do comando


include.

Atravs desse tipo de arquivo, possvel criar funes e coloc-las disposio do


programador.

exemplo-uso-bibliotecas.h
Escopo de variveis

Escopo o conjunto de regras que determinam o uso e a validade de variveis nas diversas
partes do programa.

Variveis locais

Estas variveis so aquelas que s tm validade dentro do bloco no qual so declaradas.

exemplo-variaveis-locais.c

Parmetros formais

Estes so declarados como sendo entradas de uma funo.

O parmetro formal uma varivel local da funo.

Esses parmetros tomam apenas uma cpia dos valores passados para a funo
(passagem por valor).

possvel alterar o valor do parmetro formal, pois esta no ter efeito na varivel que
foi passada funo.

Variveis globais

Variveis globais so declaradas fora de todas as funes do programa.

Elas so conhecidas e podem ser alteradas por todas as funes do programa.

Quando uma funo tem uma varivel local com o mesmo nome de uma varivel global
a funo dar preferncia varivel local.

exemplo-variavel-local-global.c

As variveis globais devem ser evitadas.

Outro tipo de passagem de parmetros para uma funo ocorre quando alteraes nos
parmetros formais, dentro da funo, alteram os valores dos parmetros que foram
passados para a funo. Esse tipo de chamada de funo tem o nome de chamada por
referncia.

A linguagem C s faz chamada por valor.


Tiago Eugenio de Melo www.tiagodemelo.info

Embora, por conveno, a Linguagem C adote a passagem de parmetro por valor, possvel
criar uma chamada por referncia passando o ponteiro para o argumento. Como isso faz com
que o endereo do argumento seja passado para a funo, possvel alterar o valor fora da
funo.

Exemplo-funcao-passagem-referencia.c
Passagem de vetores/matrizes como parmetros

Quando uma matriz/vetor passado como argumento de uma funo, apenas o endereo da
matriz passado, no uma cpia da matriz/vetor inteiro.

Existem trs formas de se passar uma matriz ou vetor para uma funo:

void imprimir (int vet [10]);

void imprimir (int vet[]);

void imprimir (int *vet);

exemplo-funcao-passagem-matriz.c

Estruturas

As estruturas so colees de variveis de vrios tipos, que so referidas dentro do programa


pelo mesmo nome.

Sintaxe:
struct <nome-estrutura> {
<tipo1> <nome1>;
<tipo2> <nome2>;
} <lista-variveis-estrutura>;

<nome-estrutura> define a estrutura e <lista-variveis-estrutura> uma lista separada por


vrgulas de variveis que tm as mesmas caractersticas.
Exemplo:

struct estruturaAluno {
char nome[20];
int matricula;
float nota;
} aluno1, aluno2;

Para se fazer referncia a um dos elementos da estrutura utiliza-se o nome de uma das variveis
da <lista-variveis-estrutura> seguido de um ponto e o nome do elemento. Exemplo:
aluno1.nota = 8.0.
exemplo-estrutura-aluno.c
Vetores/Matrizes de estruturas

Uma estrutura qualquer tipo de dado em C. Por isso, possvel criar vetores/matrizes do
tipo criado pela estrutura.

Exemplo: struct estruturaAluno alunos[10];


Passagem de estruturas como parmetro de uma funo

possvel passar s um elemento da estrutura ou toda a estrutura para a funo.

No primeiro caso, a utilizao igual a uma varivel comum. No segundo caso, deve-se
declarar como parmetro da funo apenas o nome da varivel da estrutura a ser enviada.

Exemplo: void preencherNome (struct tipoAluno aluno);

exemplo-estrutura-funcao.c
possvel tambm renomear o nome dos tipos pr-definidos e tambm das estruturas criadas.
Exemplo:

typedef int Inteiro;


Tiago Eugenio de Melo www.tiagodemelo.info

typedef struct estruturaAluno tipoAluno;


exemplo-typedef.c

Alocao dinmica

Alocao dinmica o processo de alocar memria do computador em tempo de execuo. Esse


tipo de alocao normalmente empregada quando no se sabe exatamente quanto de memria
ser necessrio para a execuo do programa e se quer evitar desperdcios ou por questes de
restrio do ambiente.

Na ANSCI C (padro), existem 4 funes utilizadas para a alocao dinmica:

malloc( ): utilizada para alocar memria.

calloc( ): utilizada para alocar memria.

realloc( ): utilizada para realocar memria.

free( ): utilizada para liberar memria alocada.

A funo malloc( ) utilizada para alocar a memria e possui a seguinte sintaxe: void
*malloc(tipotamanho). O parmetro tamanho quantidade de bytes que se deseja
alocar na memria e o tipo definido como sendo um inteiro sem sinal. Essa funo retorna um
ponteiro do tipo void, podendo assim ser atribudo a qualquer tipo de ponteiro.

exemplo-alocacao-estatica.c

Exemplo de programa que utiliza alocao esttica. Nesse exemplo, se o usurio digitasse
apenas 3 elementos, o restante do vetor, 97 posies, ficaria sem uso, mas tendo a memria
alocada.

exemplo-alocacao-dinamica.c

A funo calloc( ) tambm utilizada para alocar memria e tem a seguinte sintaxe:

void *calloc(unsigned int num, unsigned int size);

Exemplo de alocao para um inteiro:

ponteiro = calloc (1, 4)

O problema dessa declarao que o programador est assumindo que o tipo inteiro ser
sempre 4 bytes, o que nem sempre verdadeiro.

A melhor forma de declarao seria: ponteiro = calloc (1, sizeof(int))

A funo realloc( ) normalmente utilizada para alterar o tamanho da memria alocada para um
outro ponteiro. A sintaxe da funo :

void *realloc(void *p, tamanho_tipo tamanho)

exemplo-realloc.c
Abertura e fechamento de arquivos

Os arquivos em C so manipulados atravs de ponteiros para arquivos (FILE *p).

O comando fopen usado para a abertura de arquivos.

Sintaxe: FILE *fopen (char *nome_do_arquivo, char *modo);

A tabela com os modos de abertura de arquivos ao final.

Se ocorrer um erro na abertura do arquivo, o comando fopen retorna um ponteiro nulo


(NULL).

exemplo-arquivos-01.c
Modo

Significado

"r"

Abre um arquivo texto para leitura. O arquivo deve existir antes de ser aberto.
Abrir um arquivo texto para gravao. Se o arquivo no existir, ele ser criado.
Se j existir, o contedo anterior ser destrudo.
Abrir um arquivo texto para gravao. Os dados sero adicionados no fim do
arquivo ("append"), se ele j existir, ou um novo arquivo ser criado, no caso de
arquivo no existente anteriormente.

"w"
"a"

Tiago Eugenio de Melo www.tiagodemelo.info

Abre um arquivo binrio para leitura. Igual ao modo "r" anterior, s que o arquivo
binrio.
Cria um arquivo binrio para escrita, como no modo "w" anterior, s que o
"wb"
arquivo binrio.
Acrescenta dados binrios no fim do arquivo, como no modo "a" anterior, s que
"ab"
o arquivo binrio.
Abre um arquivo texto para leitura e gravao. O arquivo deve existir e pode ser
"r+"
modificado.
Cria um arquivo texto para leitura e gravao. Se o arquivo existir, o contedo
"w+"
anterior ser destrudo. Se no existir, ser criado.
Abre um arquivo texto para gravao e leitura. Os dados sero adicionados no
"a+"
fim do arquivo se ele j existir, ou um novo arquivo ser criado, no caso de
arquivo no existente anteriormente.
Abre um arquivo binrio para leitura e escrita. O mesmo que "r+" acima, s que o
"r+b"
arquivo binrio.
Cria um arquivo binrio para leitura e escrita. O mesmo que "w+" acima, s que o
"w+b"
arquivo binrio.
Acrescenta dados ou cria uma arquivo binrio para leitura e escrita. O mesmo
"a+b"
que "a+" acima, s que o arquivo binrio
"rb"

O comando fclose usado para o fechamento de arquivos.

Sintaxe: int fclose (FILE *fp);

A funo retorna zero no caso de sucesso no fechamento do arquivo.

Lendo e escrevendo caracteres em arquivos

O comando putc usado para escrever em um arquivo.

Sintaxe: int putc (int ch, FILE *fp);

exemplo-arquivos-02.c

O comando getc retorna um caractere lido do arquivo.

Sintaxe: int getc (FILE *fp);

exemplo-arquivos-03.c

O comando feof indica o fim de um arquivo.

Sintaxe: int feof (FILE *fp);

A funo retorna no-zero se o arquivo chegou ao EOF, caso contrrio retorna zero.

Outra forma de verificar o fim de um arquivo comparar o caractere lido por getc com EOF.

exemplo-arquivos-04.c

O comando fputs escreve uma string para dentro de um arquivo.

Sintaxe: int fputs (char *str, FILE *ptr);

A funo retorna um valor no negativo se for executada com sucesso e retorna EOF se
ocorrer uma falha.

O comando no executa uma quebra de linha a cada execuo.

exemplo-fputs.c

O comando fgets l uma string de um determinado arquivo.

Sintaxe: char *fgets (char *str, int num, FILE *ptr);

A funo retorna o mesmo contedo de str (parmetro) se for executada com sucesso. A
funo retorna um ponteiro nulo se no for executada com sucesso.

exemplo-fgets.c
Referncias
MONTGOMERY, Eduard. Programando com C Simples e Prtico. Editora Alta Books: Rio de
Janeiro, 2006.
Tiago Eugenio de Melo www.tiagodemelo.info

SANTOS, Henrique Jos. Curso de Linguagem C. Universidade Federal de Minas Gerais, 1997.

Tiago Eugenio de Melo www.tiagodemelo.info