Mostrando postagens com marcador memória. Mostrar todas as postagens
Mostrando postagens com marcador memória. Mostrar todas as postagens

quinta-feira, 21 de fevereiro de 2008

Operador de endereço

Quando falei sobre criação e inicialização de variáveis, falei também que cada variável recebe uma casa, chamada de memória.
Como toda casa possui um endereço (Rua, número, bairro, cidade, estado, país, CEP), a memória possui um endereçamento, muito mais simplificado, composto por números.
Esses números indexam a memória byte-a-byte.
Vamos recorrer ao exemplo abaixo para compreender melhor:

Endereço204820492050
IdentificadorsexoanoNascimento
Valor'F'1982

O exemplo representa um fragmento de memória, na qual estão presentes duas variáveis identificadas por sexo e anoNascimento. Pelo número de bytes alocados para cada variável e, com o auxílio da tabela de limites mínimos de variáveis, pode-se concluir que sexo é do tipo char e anoNascimento é inteiro.
Quando pergunto qual o endereço de sexo, a resposta deve ser 2048. Quando pergunto qual o endereço de anoNascimento, a dúvida impera!
Alguns respondem 2049, outros 2050, um grupo isolado arrisca 2049 e 2050. A resposta correta é 2049. O endereço de uma variável que ocupa mais de um byte é o menor endereço do bloco de memória ocupado pela variável. O bloco ocupado por anoNascimento é 2049-2050, portanto o menor endereço desse bloco é 2049.
Na linguagem C a forma utilizada para descobrir o endereço de uma variável é por meio do operador &.
O programa abaixo ilustra como se utiliza o operador & para imprimir na tela o endereço de uma variável.


001:  #include <stdio.h>
002:  #include <stdlib.h>
003:
004:  int main(int argc, char *argv[])
005:  {
006:    char sexo = 'F';
007:    int anoNascimento = 1982;
008:
009:    printf("O endereco de sexo e %p\n", &sexo);
010:    printf("O endereco de anoNascimento e %p\n", &anoNascimento);
011:    system("PAUSE");
012:    return 0;
013:  }


Com base no fragmento de memória apresentado anteriormente, a saída esperada para esse programa é:


O endereço de sexo e 2048
O endereço de anoNascimento e 2049


Você deve estar se perguntando... Quando usarei esse operador?
Primeiramente na função scanf, utilizada na leitura de dados do teclado, e mais a frente em passagem de parâmetros por referência (o que é feito na função scanf) e no uso de ponteiros.
A propósito, a passagem de parâmetro por referência é feita utilizando ponteiros. :D

sexta-feira, 15 de fevereiro de 2008

Tipos básicos de dados na linguagem C.

Os tipos de dados são utilizados para assinalar qual será a forma de tratamento dispensada ao dado em memória ou outro sistema de armazenamento de dados.
A linguagem C possui cinco tipos básicos de dados:
  1. char
  2. int
  3. float
  4. double
  5. void

Com exceção do void, os tipos em linguagem C são todos numéricos e podem ser aplicadas às operações aritméticas disponíveis no C, com ressalvas ao operador de módulo.
O tipo void é utilizado como retorno de funções e tipo de ponteiros.
Os tipos char e int são utilizados para armazenar números inteiros negativos e positivos. O tipo int utiliza mais bytes para armazenamento que o char, o que lhe proporciona maior faixa de valores.
Os tipos float e doube armazenam números de ponto flutuante (números reais). O double utiliza maior número de bytes que o float, o que proporciona maior faixa de valores e ainda, maior precisão numérica.
A American National Standard Institute (ANSI) padroniza os valores mínimos para os tipos de dados do C. O compilador que você utiliza deve seguir esse padrão!
Abaixo está a tabela de tipos com seus respectivos tamanhos e faixa de valores padronizada pela ANSI.

TipoTamanho (*)Faixa mínima
char1-127 a 127
int2-32.767 a 32.767
float4Seis dígitos de precisão
double8Dez dígitos de precisão
void--
* Valor aproximado em bytes.