O que é um apontador em C (type pointer in C)?
|
|
- Luiz Eduardo Canela Vieira
- 7 Há anos
- Visualizações:
Transcrição
1 O que é um apontador em C (type pointer in C)? Um apontador é uma variável que contém um endereço de outra variável. int x = 10;//variável inteira iniciada com o valor 10 int *px = &x;//variável apontadora iniciada com o endereço de localização na memória do x Neste caso temos x, como uma variável que armazena um valor do tipo inteiro e px como um apontador ou ponteiro do tipo inteiro que que armazena o endereço da variável x do tipo inteiro. Se a variável fosse do tipo char o apontador teria de ser do tipo char. O valor do apontador armazenado em px é o endereço na memória da variável x, obtido com o operador &, i.e., o endereço de x é dado por &x. Definição de variável apontadora? type* nomevarapontadora; //o type são os estudados em C Operador & O endereço de uma variável é obtido através do operador &. Operador referenciação de memória. int a = 43; // um inteiro iniciado a 43 int* ptrint; // apontador para inteiro não iniciado ptrint = &a; // ptrint passa a guardar o endereço de a- faz referencia ao endereço de a /* definir e iniciar ptrint1 na mesma linha com &a */ int *ptrint1 = &a; //O valor de a, de *ptrin e de prtint1 referem-se o mesmo valor 43 Operador * O operador * permite aceder ao conteúdo de uma posição memória para onde a apontador aponta. Operador desreferenciação. int b; //definição da variável b que irá armazenar um valor inteiro //ptrint foi definido e iniciado no exemplo anterior com endereço de a b =*ptrint;//b é afectado com o valor 43 *ptrint = 12; //o conteúdo apontado (referido) por prtint é alterado com 12. O valor do a, //exemplo anterior é alterado de 43 para 12. #include <stdio.h> int main() { int y, x = 1; //declara dois inteiros, um com o valor 1 int *px; //px é apontador para int. Não está iniciado com qualquer endereço px = &x; //px fica com o valor do endereço de x y = *px;//y fica com conteúdo do endereço de memória apontado por px, o valor 1 *px = 0;//conteúdo da posição de memória apontador por px, a variável x, fica a 0 printf("x=%d y=%d\n", x, y); // output: x=0 y=1 int* p;//apontador não iniciado, mas quando for usado o conteúdo terá que estar *P=2; //usar "conteúdo de " antes de p iniciado com o "endereço de " dá ERRO
2 NOTA IMPORTANTE: inicie apontador com o endereço de.. antes de usar o seu conteúdo Uso de apontadores * O valor de retorno de uma função pode ser um ponteiro: int* blabla(); O parametros de uma função pode ser um ponteiro: int abcd(char* a, int* b); A prioridade de & e * é superior à dos operadores aritméticos. int y, x=2; // define y e x com valor de 2 int* px=&x; //define e inicia px com endereço de x y = *px + 1; //funciona como esperado. Incrementa o valor de ++*px; //incrementa o valor de x, em que x é a variável apontada por px; (*px)++; //(os parênteses são necessários). Como discutido em aulas anteriores, em C os parâmetros são passados por valor. Por exemplo, no seguinte caso, o comportamento não é o esperado, a troca de valores apenas ocorre no contexto da função, não se manifestando fora da mesma. void trocas( int a, int b ) { int aux = a; a = b; b = aux; Podemos no entanto passar a ter parâmetros definidos como apontadores que recebem dos argumentos os valores de endereços das variáveis passadas e dentro da função acedemos aos conteúdos das variáveis passadas, podendo deste modo alterar o seu valor. No exemplo anterior não é possível alterar os argumentos. void trocap( int* a, int* b ) {//recebe valores quer são endereços de int aux = *a; //acesso aos conteúdos através operação desreferenciação (*a) *a = *b; *b = aux; Neste caso, esta função deverá ser chamada da seguinte forma: int x = 5, y = 6; trocarp(&x, &y); // Os valores dos endereços de &x e de &y Podemos também passar em parâmetros um array e dois índices que recebem como argumentos os valores armazenados do array e os valores dos índices. Uma variável array é naturalmente um endereço de memória onde se armazena os valores e dentro da função acede-se aos conteúdos da variável array através dos índices. void trocaa( int a[], int p, int q ) {//recebe em a o array e em p e q os índices int aux = a[p]; //acesso ao conteúdo de a através do índice p a[p] = a[q]; a[q] = aux; //o mesmo que void trocaa( int* a, int p, int q ) {//recebe em a o array e em p e q os índices int aux = *(a+p); //a[p]; //acesso ao conteúdo de a através do índice p *(a+p) = *(a+q); *(a+q) = aux;
3 Ponteiro nulo / Endereço zero O ponteiro nulo representa ou referencia o endereço 0. int *prt = NULL; O NULL está definido em stdlib.h, pelo que é necessário incluir este ficheiro se quisermos utilizar o NULL. Em C existe uma relação estreita entre apontadores e vectores (array). #include <stdio.h> int main() { int a[6] = {1, 2, 3, 4, 5, 6; int *pa = a; printf("%d %d %d\n", a[2], *(a+2), *(pa+2)); O a é em particular um ponteiro para a primeira posição do vector. Notar que os ponteiros têm uma aritmética própria, quando fazemos pa+2 estamos a avançar na realidade 2*sizeof(int)bytes, ou seja, pa+2 aponta para uma posição de memória 2*sizeof(int) bytes depois da posição apontada por pa. Podemos efectuar quer a operação + quer a operação - sobre variáveis apontadoras. Ainda que exista uma relação estreita entre ponteiros e tabelas, devemos ter em conta que: ainda que a declaração int* p1; declare o mesmo que int p2[];, temos que p1 pode ser alterado, mas p2 não pode ser alterado e int p2[]; só pode ser utilizado em certos casos; a declaração int p3[100]; declara uma tabela com 100 inteiros e aloca memória na quantidade necessária; a declaração char *text; não aloca qualquer memória, no entanto char *text = "ola"; aloca. Qual a diferença entre as duas declarações seguintes? char t1[] = "ola"; char *t2 = "ola"; Ambas alocam 4 bytes e copiam para essa posição de memória a sequência de caracteres 'o','l','a','\0' Em ambos os casos é possível modificar o conteúdo da memória alocada. Não é possível alterar o valor de t1, ou seja não é possível por t1 a apontar para outra posição de memória. É possível alterar o valor de t2. Exercícios e exemplos Exercício 1: Seja float a[100]; float *p=a; Indique para cada uma das seguintes afirmações é verdadeira ou falsa: a[i] é equivalente a *(a+i) &a[i] é equivalente a a+i
4 a[i] é equivalente a p[i] p[i] é equivalente a *(p+i) *a, a[0] e a são equivalentes a p[0] Exemplo 1: Cópia de sequências de caracteres. void strcpy( char* s, const char* t ){ int i = 0 while( (s[i] = t[i])!= \0 ) i++; ou void strcpy( char* s, const char* t ){ while( (*s = *t)!= \0 ) { s++; t++; ou void strcpy(char *s, const char *t){ while( (*s++ = *t++) ); Exercício 2: Quando fazemos int a; scanf("%d",&a); o que estamos a passar ao scanf? E Porque não precisamos do & no seguinte caso? char s[100]; scanf("%s",s);/o s neste caso já é o endereço Exemplo 2: A passagem por referência consegue-se, porque é passado o apontador: void levector(int *v, int tamanho ) { int i; for( i=0 ; i<tamanho ; i++) scanf("%d", &v[i]); Podemos escrever int* v ou int v[]. Como v já é um endereço, podemos alterar o v dentro da função. Argumentos da linha de comandos int main( int argc, char* argv[] ) { int i; for(i=1; i<argc; i++ ) printf("%s ", argv[i]); printf("\n"); O argumento argc fica com o número de argumentos passados ao programa na linha de comando, argv[0] é o nome com que o programa fui invocado e argv[i] é i-ésimo argumento. Se o código acima for compilado e se o executarmos com a seguir se apresenta produz a escrita em terminal de: isel@linuxvm:~/exemplo$ teste hello world hello world
5 Alocação dinâmica de memória Até ao momento utilizámos sempre alocação estática: int tab[100]; Neste caso a memória é alocada durante o scope da variável, não é possível libertar a mesma quando já não é necessária, e não é possível utilizar a mesma fora do scope. A solução para ultrapassar estas limitações passa por utilizar alocação dinâmica. Função malloc void *malloc(size_t size); Esta função recebe como argumento o número de bytes o tipo size_t representa uma dimensão em bytes e devolve um apontado (endereço) para o primeiro byte do bloco de memória contígua alocada. O tipo de retorno void* indica um ponteiro para um tipo não especificado, o que permite a utilização desta função com qualquer tipo de dados. Posteriormente faz-se conversão para o tipo correcto por type cast. int *vec; vec = (int*) malloc(sizeof(int)*37); Função realloc void *realloc(void *ptr, size_t size); A função realloc recebe como argumentos um ponteiro ptr para bloco de memória já existente e a dimensão size que o novo bloco de memória deverá ter. Esta função devolve um ponteiro para novo bloco de memória e copia os valores do bloco antigo para o novo, em que se novo bloco for mais pequeno, só copia até caber, se o novo bloco for maior, copia tudo e deixa o resto sem ser inicializado. Se o argumento ptr for NULL, então a função realloc tem um comportamento idêntico ao da função malloc. Função free Para libertar memória podemos utilizar a função: void free(void *ptr); O argumento é um ponteiro para a primeira posição do bloco de memória contígua a libertar. Esta função não retorna nada. Como libertar a memória reservada com o malloc anterior? free(vec); Todas estas função estão definidas em stdlib.h, pelo que é necessário incluir este ficheiro (#include <stdlib.h> ).
6 Outras funções úteis Existem outras funções úteis para, por exemplo, inicializar a memória alocada ou para copiar segmentos de memória. De facto, a função void *calloc(size_t nelems, size_t size) permite tal como a função malloc alocar memória, neste caso para um vector com nelems elementos em que cada elemento tem size bytes, mas em que a memória é inicializada a zero. Em geral podemos inicializar qualquer segmento de memória com a função void *memset(void *s, int c, size_t n), definida em string.h, que inicializa os primeiros n bytes de memória apontada por s com o valor c. Qual deve ser o valor de c se quisermos inicializar um vector de inteiros com valor -1 em todas as entradas? A função void *memcpy(void *dest, const void *src, size_t n) é também útil para copiar segmentos de memória. Dados dois ponteiros src e dest para dois segmentos de memória sem sobreposição, esta função copia os primeiros n bytes apontados por src para os primeiros n bytes apontados por dest. É do programador a responsabilidade de garantir que não existe sobreposição entre os segmentos de memória e que os acessos de leitura e escrita ocorrem dentro dos limites da memória alocada. Exercício já resolvido: Envolve alocação dinâmica. #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char *str1=null, *str2=null; //definir e iniciar um array dinámico de char str1 = (char *)malloc(11); //10+1 (1 é para o \0) strcpy(str1, "ABCDEFGHIJ");//faz cópia para str1 de "ABC..J" //O str2 é NULL então esta função tem comportamento do malloc str2 = (char *)realloc(str2, 20);//20 é o tamanho do novo bloco. printf("endereço de str1= %p\n", str1); printf("endereço de str2= %p\n", str2); //Este novo bloco de memória tem a cópia dos valores do str1 que ocupa 11 chars str1 = (char *)realloc(str1, 200);//novo bloco de memória de tamanho 100 strcat(str1, " acrescentar ABCD"); printf("novo endereço de str1= %p\n", str1); printf("conteudo de str1= %s tamanho=%d\n", str1, strlen(str1)); char* s=strchr(str1,'z'); if( s== NULL ) printf("o Z não existe\n"); s=strchr(str1,'t'); if( s!= NULL ) printf("o t existe e a string a partir de t é =%s\n",s); free(str1);//libertar o bloco de memoria, porque não é mais necessário free(str2); Mais uma funções com uso de alocação dinâmica de memória //capacidade inicial 10 que vai crescendo com o factor de duplicação #define MAX 10 /*lê valores inteiros para o array a ser criado, preenchido e retornado por quem *chamar esta função. O total de valores é passado em parâmetro por referência. */ int* preencherarray(int* fact ){//fact recebe endereço-passagem por referência printf("digite inteiros e termine com uma letra\n"); int* v = malloc( sizeof(int)*(*fact) );//alocar um bloco de memória array v int i; for( i=0 ; ; i++ ) { if( scanf("%d", &v[i])!=1 ) break;//o for(;;) termina quando se digita letra if( i==*fact-1 ) { *fact *=2; //factor de duplicação v = realloc( v, sizeof(int)*(*fact) );//realocar novo bloco de memória *fact=i;//actualizar o parametro de referencia com o total return v; //retorna para quem chama este array de inteiros
Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013
Ponteiros e Tabelas K&R: Capitulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros
Leia maisPonteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013
Ponteiros e Tabelas K&R: Capitulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros
Leia maisPonteiros e Tabelas. K&R: Capítulo 5
Ponteiros e Tabelas K&R: Capítulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros
Leia maisPonteiros & tabelas (cont.) K&R: Capítulo 5
Ponteiros & tabelas (cont.) K&R: Capítulo 5 Sinopse da aula de hoje Pointers in a nutshell & alocação dinâmica de memória Estruturas, funções e apontadores Estruturas auto-referenciadas Exemplo de aplicação:
Leia maisPonteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória
Ponteiros - Parte I Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória Ponteiros Um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente
Leia mais1/34 GESTÃO DINÂMICA DE MEMÓRIA
1/34 GESTÃO DINÂMICA DE MEMÓRIA Memória Estática 2/34 Memória Estática Exemplo #include main() { int V[300], N; do{ printf ( N =? ); scanf ( %d, &N); while ((N < 0) (N > 300); for (i = 0; i
Leia maisINSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE Algoritmos ANSI C - Gerenciamento de Memória Copyright 2014 IFRN Agenda Introdução Alocação dinâmica Funções malloc free calloc realloc
Leia maisProgramação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos
Leia maisPonteiros. Introdução
Ponteiros Introdução Conceito Um PONTEIRO ou APONTADOR é uma variável usada para armazenar um endereço de memória. Normalmente, o endereço armazenado em um PONTEIRO é a posição de uma outra variável na
Leia maisPonteiros. Introdução e Alocação Dinâmica
Ponteiros Introdução e Alocação Dinâmica Conceito Um PONTEIRO ou APONTADOR é uma variável usada para armazenar um endereço de memória. Normalmente, o endereço armazenado em um PONTEIRO é a posição de uma
Leia maisAula 17: Ponteiros e Alocação Dinâmica em C
Aula 17: Ponteiros e Alocação Dinâmica em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Ponteiros e Alocação Dinâmica Programação de Computadores
Leia maisProgramação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 11 Gestão de Memória Dinâmica
Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre T. 11 Gestão de Memória Dinâmica 1 Sumário : Utilização de memória Alocação Estática de Memória Alocação Dinâmica de Memória
Leia maisExercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os
Leia maisProgramação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos
Leia maisIntrodução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo
Introdução à Ciência da Computação I Alocação Dinâmica Prof. Claudio Fabiano Motta Toledo Sumário Funções para alocação de memória Ponteiros para ponteiros 8/12/16 2 Funções para alocação de memória malloc(),
Leia maisLinguagem C. Ponteiros. Alex Vidigal Bastos.
Linguagem C Ponteiros Alex Vidigal Bastos alexvbh@gmail.com Ponteiros Ponteiros são variáveis que contém endereços. Estas variáveis apontam para algum determinado endereço da memória. Em geral, o ponteiro
Leia maisPonteiros e Alocação de Memória
Algoritmos e Estrutura de Dados I Ponteiros e Alocação de Memória Prof. Paulo Henrique Pisani fevereiro/2019 Memória Podemos entender a memória como um grande vetor de bytes devidamente endereçados: 0x1051
Leia maisPonteiros. Baseado nos slides do Prof. Mauro.
Baseado nos slides do Prof. Mauro. A memória do computador é uma sequência de bytes, na qual endereçamos cada um sequencialmente. Como vimos, uma variável é uma região da memória que reservamos para armazenar
Leia maisIntrodução a Programação. Ponteiros e Strings, Alocação Dinâmica
Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros
Leia maisProgramação. Cap. 12 Gestão de Memória Dinâmica
Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Cap. 12 Gestão de Memória Dinâmica Sumário : Utilização de memória Alocação
Leia maisIntrodução a Programação. Ponteiros e Vetores, Alocação Dinâmica
Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes
Leia maisPonteiros. prof. Fabrício Olivetti de França
Ponteiros prof. Fabrício Olivetti de França Anteriormente em prog. estrut. Vimos que as variáveis representando arrays em C armazenam apenas um apontador para o endereço de memória contendo os valores
Leia maisA linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.
Alocação de Memória Todo programa precisa utilizar memória para ser executado. Quando um programa inicia sua execução, ele começa a solicitar memória ao sistema operacional, ou seja, faz a alocação de
Leia maisAlocação Dinâmica em C
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
Leia maisEstruturas Dinâmicas - Ponteiros
SSC0800 - ICC1 Teórica Introdução à Ciência da Computação I Estruturas Dinâmicas - Ponteiros Prof. Claudio Fabiano Motta Toledo: claudio@icmc.usp.br Sumário Ponteiros Ponteiros e Vetores Funções para alocação
Leia maisProgramação Computacional Aula 16: Alocação Dinâmica de Memória
Programação Computacional Aula 16: Alocação Dinâmica de Memória Profa. Madeleine Medrano madeleine@icte.uftm.edu.br Definição Sempre que escrevemos um programa, é preciso reservar espaço para as informações
Leia maisAlocação Dinâmica. Introdução à Computação
Alocação Dinâmica Introdução à Computação Alocação de memória Uso da memória: uso de variáveis globais (e está>cas): O espaço reservado para uma variável global existe enquanto o programa es>ver sendo
Leia maisMódulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Leia maisPrincípios de Desenvolvimento de Algoritmos MAC122
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Alocação Dinâmica de Memória Motivação: Nossos programas pré-fixavam o número de variáveis a serem utilizadas. No caso
Leia maisEstruturas de Dados. Profa. Juliana Pinheiro Campos
Estruturas de Dados Profa. Juliana Pinheiro Campos Vetores Forma mais simples de estruturar um conjunto de dados. Exemplo: int p[10]; // vetor de inteiros com 10 elementos Reserva de um espaço de memória
Leia maisProgramação Estruturada
Programação Estruturada Ponteiros Parte 1 Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Ponteiros Ponteiro Ponteiros
Leia maisPonteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ
Ponteiros em C Adriano Joaquim de Oliveira Cruz 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ 1 Resumo da Seção Introdução Declaração Incrementando e Decrementando
Leia mais1 Exercícios com ponteiros
Computação para Informática Funções e Ponteiros1 EXERCÍCIOS COM PONTEIROS Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Funções e ponteiros O objetivo desta aula prática
Leia maisExercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,
Leia maisSSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias GE4 Bio GE4Bio Grupo de Estudos em Sinais Biológicos Prof.Dr.
Leia maisLaboratório de Introdução à Ciência da Computação I
Laboratório de Introdução à Ciência da Computação I Aula 12 Alocação dinâmica de memória Professor: Jó Ueyama Estagiária PAE: Aurea Soriano slide 1 Funções para alocação de memória malloc(), calloc(),
Leia maisUniversidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação
Leia maisReinaldo Gomes Alocação Dinâmica
Algoritmos e Lógica de Programação Linguagem C Alocação Dinâmica i de Memória Reinaldo Gomes reinaldo@cefet-al.br Alocação Dinâmica Quando declaramos uma variável ou um arranjo, o compilador automaticamente
Leia maisA sintaxe para se declarar uma variável do tipo ponteiro é dada por:
Pense duas vezes e faça uma vez. Provérbio Chinês. PONTEIROS Um ponteiro nada mais é que uma variável capaz de armazenar um número hexadecimal que corresponde a um endereço de memória de outra variável.
Leia maisModulo 12: alocação dinâmica de memória
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 12: alocação dinâmica de memória Aura - Erick aconci@ic.uff.br, erickr@id.uff.br Roteiro porque e como utilizar a alocação dinâmica funções: malloc (
Leia maisEstruturas de Dados Aula 6: Cadeias de 28/03/2010
Estruturas de Dados Aula 6: Cadeias de Caracteres 28/03/2010 Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis
Leia maisEstruturas de Dados Aula 6: Cadeias de Caracteres
Estruturas de Dados Aula 6: Cadeias de Caracteres Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis Códigos
Leia mais13. ALOCAÇÃO DINÂMICA DE MEMÓRIA
787878787878787878787878787878787878787878787878787878 13. ALOCAÇÃO DINÂMICA DE MEMÓRIA Sempre é necessário declarar o número de elementos do array. Mas e se ele for desconhecido? E se ele variar? Pode
Leia maisAlgoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta
Algoritmos e Estruturas de Dados Prof. Marcelo Zorzan Profa. Melissa Zanatta Assuntos da Aula Alocação de Memória Alocação estática de memória Alocação dinâmica de memória Malloc, Calloc, Free, Realloc
Leia maisEstrutura de Dados. Aula 07 Alocação Dinâmica
Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).
Leia maisALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória
ALGORITMOS E ESRUTRA DE DADOS I Ponteiros Passagem por Valor e Referência Alocação de Memória 2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos
Leia maisMais sobre Ponteiros em C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Mais sobre Ponteiros em C Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010 ROTEIRO
Leia maisMétodos Computacionais. Vetores e Matrizes Dinâmicas
Métodos Computacionais Vetores e Matrizes Dinâmicas Vetores Um programa para o cálculo da média Média m n i= = 1 n x i Variância v n i= = 1 ( x i n m) 2 A forma mais simples de estruturar um conjunto de
Leia maisLinguagem C Apontadores. Endereços e apontadores Passagem de parâmetros para funções Apontadores e vectores Memória dinâmica
Linguagem C Apontadores Endereços e apontadores Passagem de parâmetros para funções Apontadores e vectores Memória dinâmica Endereços de Memória Podemos considerar a memória como um vector M, em que cada
Leia maisEstruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C
Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos
Leia maisLinguagem C Ponteiros
Linguagem C Ponteiros Instituto Federal de Educação, Ciência e Tecnologia do Triângulo Mineiro Prof. Edwar Saliba Júnior Janeiro de 2018 Unidade 14 Linguagem C - Ponteiros 1/24 Identificadores e Endereços
Leia maisREVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento
Leia maisEstruturas dinâmicas Ponteiros
SSC0102 LABORATÓRIO DE INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO I Estruturas dinâmicas Ponteiros Prof. Claudio Fabiano Motta Toledo SUMÁRIO Ponteiros e Vetores Funções para alocação de memória PONTEIROS Declaração
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Vetores e alocação dinâmica Vetores Alocação dinâmica Vetores locais e funções ATENÇÃO Esta apresentação
Leia mais1 Exercícios com ponteiros
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Oitava Aula Prática - 29 de outubro de 2010 O objetivo desta aula prática é exercitar ponteiros e funções. 1 Exercícios com ponteiros
Leia maisAula 25: Alocação Dinâmica
Aula 25: Alocação Dinâmica Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aulas anteriores Estruturas de memórias heterogêneas
Leia maisTipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas
Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas 03/03/2010 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa
Leia maisEstruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?
Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? 1 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa o
Leia maisEstruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011
Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011 Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa
Leia maisExercícios sobre textos; Alocação dinâmica.
s sobre textos; Alocação dinâmica. David Deharbe 1 1 s Escreva uma sub-rotina, chamada strchr, que recebe um string s (= o endereço onde está guardado um texto), um caracter c e retorna o endereço da primeira
Leia maisLINGUAGEM C: ALOCAÇÃO DINÂMICA
LINGUAGEM C: ALOCAÇÃO DINÂMICA Prof. André Backes DEFINIÇÃO Sempre que escrevemos um programa, é preciso reservar espaço para as informações que serão processadas. Para isso utilizamos as variáveis Uma
Leia maisAlocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger
Alocação Estática e Dinâmica Prof. M.Sc. Mariella Berger http://www.inf.ufes.br/~mberger mberger@inf.ufes.br mariellaberger@gmail.com Alocação Estática Estratégia de alocação de memória na qual toda a
Leia maisEstrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses
1 3 Estrutura de dados 2 Ponteiro Ponteiro 2 O ponteiro é um tipo de dado como int, char ou float. A diferença do ponteiro ponteiro guardará um endereço de memória. Por meio deste endereço pode-se acessar
Leia maisPonteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.
Ponteiro Definição de variável apontadora Aritmética de ponteiros Ponteiros e vetores Funções e passagem por referência Structs e ponteiros Alocação dinâmica de memória Objetivo Ponteiro Ponteiro Compreender
Leia maisprim = A ; prim = &A[0];
57 12 - MAIS SOBRE APONTADOR 12.1 - Ponteiros e arrays Em C, ponteiros e matrizes são tratados de maneira semelhante. 12.1.1 - Nome O nome é um ponteiro, ou seja, aponta (contém o endereço) para o primeiro
Leia maisEstruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores 14/03/2011 e 16/03/2011 Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto
Leia maisEstruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto programa estiver executando
Leia maisFundamentos de Programação
Fundamentos de Programação ET42G Aula 21 Prof. Daniel Cavalcanti Jeronymo Conversão de tipos. Alocação dinâmica de memória. Recursão. Criação de bibliotecas, arquivos de cabeçalhos e variáveis globais.
Leia maisPonteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço.
Logo Aula 06 Ponteiros 2 Ponteiros Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço. Um exemplo clássico disto
Leia maisMódulo 7 Cadeias de Caracteres
Estruturas de Dados Módulo 7 Cadeias de Caracteres 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Leia maisProgramação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto
Programação I Ponteiros e alocação dinâmica de memória Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br Ponteiros O ponteiro é um tipo de dado como int, char ou float; Variáveis
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 04 Alocação Dinâmica Edirlei Soares de Lima Vetores - Declaração e Inicialização Declaração de um vetor: int meu_vetor[10]; Reserva um espaço de memória
Leia maisEstrutura de dados 1. Ponteiros
Estrutura de dados 1 Ponteiros Ponteiros Um ponteiro é um endereço de memória O valor de um ponteiro indica onde uma variável está armazenada Um ponteiro proporciona um modo de acesso a uma variável sem
Leia maisESTRUTURA DE DADOS (TCC )
ESTRUTURA DE DADOS (TCC-00.319) Ponteiros e funções Cristina Boeres 2 Ponteiros Variável do tipo ponteiro:! Linguagens como C permite o armazenamento e a manipulação de valores de endereços de memória!
Leia maisMétodos Computacionais. Tipos Estruturados
Métodos Computacionais Tipos Estruturados Tipos Estruturados C oferece tipos primitivos que servem para representar valores simples Reais (float, double), inteiros (int), caracter (char) C oferece também
Leia maisCurso de Programação C em Ambientes Linux Aula 05
Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo
Leia maisDAS5102 Fundamentos da Estrutura da Informação
Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa
Leia maisBruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória
Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Alocação Dinâmica de Memória Alocação Estática x Dinâmica C: dois tipos de alocação de memória: Estática e Dinâmica Na alocação estática, o espaço
Leia maisIntrodução à Programação
Introdução à Programação Aula 08 Ponteiros Edirlei Soares de Lima Endereço de uma Variável Toda variável definida em um programa ocupa uma área de memória; A cada área de memória
Leia maisProgramação de Computadores II
Programação de Computadores II 2019.1 Endereço e Ponteiro Endereço Ao colocarmos o símbolo & temos o endereço daquela variável. Ponteiro Ao colocarmos o símbolo * temos o valor da variável armazenada num
Leia maisAula 18: Funções em C
Aula 18: Funções em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Funções em C Programação de Computadores IV 1 / 38 Agenda 1 Revisão e Contexto
Leia maisPonteiros. um ponteiro é uma variável que contém o endereço um dado declaração: * indica que a variável é um ponteiro. Ex: tipo_dado *nome_ponteiro;
Ponteiros um ponteiro é uma variável que contém o endereço um dado declaração: * indica que a variável é um ponteiro Ex: tipo_dado *nome_ponteiro; /* compilador sabe que pi é ponteiro */ /* pi é um ponteiro
Leia maisComputação 2. Aula 7. Profª. Fabiany Ponteiros
Computação 2 Aula 7 Ponteiros Profª. Fabiany fabianyl@utfpr.edu.br O que são Ponteiros? Um ponteiro é uma variável que contém um endereço de memória. Este endereço é normalmente a posição de uma outra
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 08 Vetor de Ponteiros Edirlei Soares de Lima Vetor de Cadeia de Caracteres Um vetor de cadeia de caracteres pode ser alocado de duas formas: Alocação
Leia mais5. Vetores e alocação dinâmica
5. Vetores e alocação dinâmica W. Celes e J. L. Rangel 5.1. Vetores A forma mais simples de estruturarmos um conjunto de dados é por meio de vetores. Como a maioria das linguagens de programação, C permite
Leia maisPonteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1
Ponteiros em C Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1 Índice Introdução Operações sobre Ponteiros Exemplos Ponteiros e Funções Alocação Dinâmica em C UDESC - Rui J. Tramontin Jr.
Leia maisLinguagem C (continuação)
Linguagem C (continuação) Funções, arrays e ponteiros Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira Centro de Cálculo Instituto Superior de Engenharia de Lisboa João
Leia maisPonteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista
Ponteiros SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências
Leia maisPonteiros e Alocação Dinâmica. Prof. Péricles Miranda
Ponteiros e Alocação Dinâmica Prof. Péricles Miranda pbcm@cin.ufpe.br Memória A memória é formada por várias células. Cada célula contém um endereço e um valor. Memória Endereço Ao declararmos uma variável
Leia maisSSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias s GE4 Bio GE4Bio Grupo de Estudos em Sinais Biológicos Prof.Dr.
Leia mais11a. Aula Ponteiros e Vetores
11a. Aula Ponteiros e Vetores 2013.2 2 É um tipo de variável com uma ressalva...... armazena apenasendereçode memória (ou null) Se eu tiver o endereço da casa de Francisca, eu poderei visitá-la e lhe fazer
Leia maisBruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória
Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Alocação Dinâmica de Memória Alocação Estática x Dinâmica C: dois tipos de alocação de memória: Estática e Dinâmica Na alocação estática, o espaço
Leia maisProgramação de Computadores II. Cap. 7 Cadeias de Caracteres
Programação de Computadores II Cap. 7 Cadeias de Caracteres Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais
Leia maisBásico: estrutura de programa, sintaxe Interface com linha de comando
Programação em C Sintaxe Básico: estrutura de programa, sintaxe Interface com linha de comando Preprocessamento e compilação Makefiles Ponteiros e estruturas Bibliotecas, ficheiros include e funções Referências
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 07 Vetor de Ponteiros Edirlei Soares de Lima Vetor de Cadeia de Caracteres Vetores de cadeias de caracteres. Exemplo: char alunos[50][81]; Função para
Leia maisED1 - Aula 01 Introducao e revisão
ED1 - Aula 01 Introducao e revisão Profa. Nádia Félix Hebert Coelho Instituto de Informática Universidade Federal de Goiás Roteiro Detalhes do curso Plano de Ensino sharif Revisão Tipos Construídos Alocação
Leia mais