Introdução à Ciência da Computação - Fábio Mokarzel - Elsevier 2008

Page 261

252

INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO

#include <stdio.h> void main ( ) { float a = 13.5, *p; int b = 15, *q; p = &a; q = &b; printf ( a = %g; b = %d;\np = &a = %ld; q = &b = %ld; , a, b, p, q); printf ( \n&p = %ld; &q = %ld; , &p, &q); } Figura 9.3 Programa gerador do mapa da Figura 9.1. a = 13.5; b = 15; p = &a = 604972072; q = &b = 604972066; &p = 604972068; &q = 604972062; Figura 9.4 Resultado do programa da Figura 9.3.

Uma vez que os endereços num sistema de memória são números inteiros não-negativos, tais números também podem ser atribuídos às variáveis ponteiros, desde que sejam convertidos para endereços. Tal como o resultado de uma expressão pode ser convertido de um tipo para outro (ver Seção 3.6.4), um número inteiro pode ser convertido num endereço usando-se um fator de conversão. Por exemplo, considerando-se as mesmas declarações anteriores, muitos compiladores não permitem a seguinte atribuição: p = 48237;

pois o lado esquerdo deveria receber um endereço e não um número inteiro. No entanto, a atribuição p = (float *) 48237;

é aceita, pois o fator (float *) converte o inteiro 48237 para um valor do tipo ponteiro para float, ou seja, para um endereço destinado a guardar valores do tipo float. Outra situação em que é necessário um fator de conversão ocorre quando uma variavel ponteiro é atribuída a outra variável ponteiro, sendo elas de tipos diferentes. Por exemplo, considerando-se as mesmas declarações de p e q vistas anteriormente, ou seja, float *p; int *q;

as atribuições p = q; e q = p; não são aceitas por vários compiladores. Então, para alcançar o objetivo desejado, deve-se escrever p = (float *)q;

e

q = (int *)p;

Deste ponto em diante, a palavra ponteiro poderá ser usada para denotar tanto variáveis como valores do tipo ponteiro. Em um programa que usa esse tipo de variável, o endereço zero de memória é considerado de forma muito especial, a ponto de a Linguagem C ter uma constante simbólica para ele. É a palavra NULL. As seguintes atribuições são equivalentes: p = 0;

e

p = NULL;

Costuma-se dizer, nesse caso, que p está aterrado, ou então que aponta para lugar nenhum. É diferente de dizer que p está indefinido, pois tal lugar é perfeitamente definido. A Figura 9.5 mostra várias interpretações gráficas para o resultado dessas atribuições.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.