TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

ESTUDO DE CASO

Dissertações: ESTUDO DE CASO. Pesquise 860.000+ trabalhos acadêmicos

Por:   •  6/6/2013  •  1.160 Palavras (5 Páginas)  •  370 Visualizações

Página 1 de 5

Universidade de São Paulo – São Carlos

Instituto de Ciências Matemáticas e de Computação

Alocação Dinâmica em C

Profa Rosana Braga

Adaptado de material preparado pela profa

Silvana Maria Affonso de Lara

1º semestre de 2010

2

Roteiro da Aula

 Alocação Dinâmica de Memória

 Vetores e alocação dinâmica

 Alocação da memória principal

 Funções para alocar e liberar memória

 Alocação dinâmica de matrizes

3

Vetores e alocação dinâmica

 A forma mais simples de estruturarmos um

conjunto de dados é por meio de vetores

 Definimos um vetor em C da seguinte forma:

int v[10];

 Esta declaração diz que v é um vetor de inteiros

dimensionado com 10 elementos, isto é,

reservamos um espaço de memória contínuo para

armazenar 10 valores inteiros. Assim, se cada int

ocupa 4 bytes, a declaração reserva um espaço de

memória de 40 bytes

4

 O acesso a cada elemento do vetor é feito

através de uma indexação da variável v .

Em C, a indexação de um vetor varia de zero a

n-1, onde n representa a dimensão do vetor.

 v[0] acessa o primeiro elemento de v

 v[1] acessa o segundo elemento de v ...

Mas v[10] invade a memória

104

144

v

Vetores e alocação dinâmica

5

Vetores e alocação dinâmica

float v[10];

int i;

/* leitura dos valores */

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

scanf("%f", &v[i] );

 Se v[i] representa o (i+1)-ésimo elemento do vetor, &v[i]

representa o endereço de memória onde esse elemento está

armazenado

 Existe uma associação entre vetores e ponteiros, pois a

variável v , que representa o vetor, é uma constante que

armazena o endereço inicial do vetor, isto é, v , sem indexação,

aponta para o primeiro elemento do vetor.

Observe que passamos para scanf

o endereço de cada

elemento do vetor ( &v[i] ), pois

desejamos que os valores

capturados sejam armazenados

nos elementos do vetor.

6

 num vetor temos as seguintes equivalências:

v + 0  aponta para o primeiro elemento do vetor

v + 1  aponta para o segundo elemento do vetor

v + 9  aponta para o último elemento do vetor

 Portanto, escrever &v[i] é equivalente a escrever (v+i)

 De maneira análoga, escrever v[i] é equivalente a escrever

*(v+i) (é lógico que a forma indexada é mais clara e adequada)

 Note que o uso da aritmética de ponteiros aqui é perfeitamente

válido, pois os elementos dos vetores são armazenados de

forma contínua na memória

Vetores e alocação dinâmica

7

 Passar um vetor para uma função consiste em passar o

endereço da primeira posição do vetor. Se passarmos um

valor de endereço, a função chamada deve ter um parâmetro

do tipo ponteiro para armazenar este valor. Assim, se

passarmos para uma função um vetor de int , devemos ter

um parâmetro do tipo int* , capaz de armazenar endereços

de inteiros

 Salientamos que a expressão “passar um vetor para uma

função” deve ser interpretada como “passar o endereço inicial

do vetor”. Os elementos do vetor não são copiados para a

função, o argumento copiado é apenas o endereço do

primeiro elemento.

Vetores e alocação dinâmica

8

/* Incrementa elementos de um vetor */

#include <stdio.h>

void incr_vetor ( int n, int *v ) {

int i;

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

v[i]++;

}

int main ( void ) {

int a[ ] = {1, 3, 5};

incr_vetor(3, a);

printf("%d %d %d \n", a[0], a[1], a[2]);

return

...

Baixar como (para membros premium)  txt (8.6 Kb)  
Continuar por mais 4 páginas »
Disponível apenas no TrabalhosGratuitos.com