C/Variáveis: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
< C
[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 98: Linha 98:
== Adress Operator ==
== Adress Operator ==


Quando declaramos uma variável é reservado uma porção de memória para poder receber o valor que vamos guardar. Esse tamanho depende da tipologia da variável, como tambémse disse.
Quando declaramos uma variável é reservado à ela um espaço na memória, onde serão guardados os dados e valores que serão atribuídos a mesma. Esse tamanho depende da tipologia da variável, como já foi citado.

Agora podemos saber o endereço da memória reservada recorrendo ao operador address.
Agora podemos saber o endereço da memória reservada recorrendo ao operador address.
Este operador vai dar o endereço do primeiro byte da memória reservada. Ele vai exprimir esse endereço na linguagem hexadecimal.
Este operador vai dar o endereço do primeiro byte da memória reservada. Ele vai exprimir esse endereço na linguagem hexadecimal.

Revisão das 16h56min de 18 de janeiro de 2007

Esta página precisa ser reciclada (discuta).
Ao melhorá-la, você estará ajudando o Wikilivros.

Declarando variáveis

Para utilizarmos informações, é necessário que o computador as receba e as "memorize". Para que seja possível para o computador "memorizar" algo, antes é preciso reservar espaço na memória. Podemos fazer isso declarando uma variável.

Ao declararmos uma variável, não apenas estamos reservando um espaço de memória, como também estamos associando um nome a ele, o identificador ou identifier. Ao invés de utilizarmos o endereço da variável na memória, que seria geralmente notado na forma hexadecimal, como por exemplo: 0x0012FED4, nos referimos ao endereço apenas pelo seu nome. Apenas para deixar claro, a própria notação em hexadecimal já é uma simplificação, pois computadores na verdade trabalham com binário.

A sintaxe da declaração de variáveis é tipo_de_variável nome_da_variável; // Note o ponto e vírgula no final.

Exemplificando, poderíamos declarar:

  • int a; // Declaro uma variável com o nome “a” e do tipo int, logo poderá guardar qualquer valor entre 0 e 65365, reserva 2 bytes
  • char manel; //declaro uma variável chamada de manel que vai guardar uma letra, vai ser reservado 1 byte para esta variável

Podemos declarar várias variáveis ao mesmo tempo se elas forem da mesma tipologia.

  • int a, b, c ; // declaro 3 variáveis de tipologia int, para cada uma será reservado 2 bytes, logo ao todo são reservados 6bytes.

O nome da variável (identifier)

Existem algumas restrições quanto ao nome que podemos dar:

  • Só podemos utilizar as letras do alfabeto de A a Z (maiúsculas ou minúsculas) e underscore "_".
  • Depois da primeira letra do nome ainda se pode utilizar os dígitos.
  • O nome não pode ter espaços.
  • O nome não pode ser igual á de outra variável já existente.
  • O nome não pode ser igual á das palavras reservadas á sintaxe da linguagem C++.
  • Temos um tamanho máximo para o nome da variável que é 31 bits.

Palavras reservadas

As palavras reservadas não é mais do que a sintax da própria linguagem C++. Vendo noutra óptica uma vez que estamos aqui para ficar craques em c++ vamos aprender o significado de cada uma destas palavras e ainda o seu contexto. a linguagem c++ permite fazer com que uma palavra tenha vários significados dependendo do contexto, por isso é que conseguimos ter tão poucas palavras e conseguimos fazer tanto. Lista de Palavras Reservadas do C++

int,char float double short long,signed unsigned void bool wchar_t for if else goto return do while break switch case continue asm, catch,const_cast, reinterpret_cast dynamic_cast,typename,default, delete, enum explicit, export, extern, friend, inline, mutable, namespace, new, operator, register true, false const auto typedef sizeof, static, static_cast, struct, union, class, public, private, protected,template, this, throw, try, typeid, using, virtual, volatile, and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq

Atribuição de valores à variáveis

Nós podemos atribuir um valor à uma variável através do operador de atribuição "=". Vide exemplo:

  • nome_da_variável = valor;
  • a = 5;

Observação: Apesar de este operador se assemelhar ao igual da matemática sua função é diferente, para fazermos a igualdade recorremos ao operador de teste de igualdade que é "==" (dois iguais).

Ele antes diz: coloca o valor que me segue e coloca-o na variável que me foi precedida. Está claro que teremos que declarar a variável antes de atribuir o valor ou .

Pergunta: será que isto é mesmo necessário, ie, declarar a variável antes de atribuir valor?

Iniciar

Declarar e atribuir valores a variáveis ao mesmo tempo = iniciação Quando se faz as duas operações ao mesmo tempo, chama-se a isso iniciação.

  • int testScore = 95;

Não se pode atribuir valor antes de fazer a declaração da variável, porque na hora da compilação o compilador não sabe a tipologia da variável.

  • testScore = 95;
  • int testScore; //erro de compilação

Pode-se iniciar várias variáveis ao mesmo tempo.

  • int a = 95, b=3 ;

Ou se quisermos

  • int a, b, c;
  • a = b = c = 0;

Neste ultimo caso, primeiro vai ser colocado o valor zero na variável c, depois a variável b vai copiar o valor presente na variável “c” e por fim a variável “a” vai copiar o valor da variável “b”

Depois ainda temos o pormenor: o valor existente numa variável pode ser mudado. Se tivermos

  • a=2
  • a=3.

no fim o valor presente na variável a será de 3.

Compatilbilidade de dados entre declaração e atribuição de valor

e se tentarmos colocar um valor diferente do que a tipologia da variável está á espera? aí temos um problema de compatibilidade de dados:

Caso1: declaramos um int e colocamos uma letra Aqui teremos um erro de compilação, em que nos diz que não conseguimos converter o char em int.

Caso2: declaramos um int e colocamos uma string Aqui teremos um erro de compilação, em que nos diz que não conseguimos converter “const char [5]’ to ‘int’. Ou seja o compilador ainda tem alguns sistemas de conversão isso dá o caso 3

Caso3: declaramos um int e colocamos um float Neste caso se colocarmos 77,33, irá ser apenas guardado o valor 77. Perde-se o .33

Caso 4: overflow : declaramos um short e colocamos um valor superior ao limite de reserva. recordam-se que o short vai de [–32768 a 32767], este é o caso onde vamos colocar um valor superior ao limite máximo. Neste caso iríamos colocar 32768. Não vai acontecer nenhum erro de compilação mas o que resulta é que vai ser impresso um número negativo - 32768. A lógica disto tem a ver com a parte aritmética. Pode ser feita uma analogia com as horas. Imaginemos que iremos somar 6 horas com 7 horas. O resultado seria 13, mas como não existe 13 no relógio, iria dar a volta nas horas e chegaria ao 1. Assim o resultado seria 1.

Caso 5: underfloat: declaramos um int e colocamos um valor inferior ao limite de reserva do int. Aqui o caso é exactamente a mesma lógica do caso de overflow, mas desta vez ultrapassa-se o limite inferior

Caso 6: declaramos um unsigned int e colocamos um número negativo O que acontece aqui é o overflow.

Adress Operator

Quando declaramos uma variável é reservado à ela um espaço na memória, onde serão guardados os dados e valores que serão atribuídos a mesma. Esse tamanho depende da tipologia da variável, como já foi citado.

Agora podemos saber o endereço da memória reservada recorrendo ao operador address. Este operador vai dar o endereço do primeiro byte da memória reservada. Ele vai exprimir esse endereço na linguagem hexadecimal.

#include <iostream>
using namespace std;
int main(void)
{
  int a=2;
  cout << "o valor de a é : "  << a << "\n";
  cout << "o valor da variável está guardado no endereço "  << &a << "\n";
  cout << "esse valor vai ocupar  " << sizeof(a) << "bytes"<< "\n";
  cout << "o endereço da variável ocupa " << sizeof(&a) << "bytes"<< "\n";
  system ("pause");
  return 0;
}

Vai ser o sistema operativo que vai escolher a localização da variável, logo do endereço da memória

Pergunta: como saber o endereço de onde está guardado o endereço de uma variável?

Pergunta: onde é que está guardado o nome da variável

A função sizeof();

  • int a = sizeof (char);

A função sizeof(); pode ter como argumento uma tipologia de variável ou mesmo a própria variável. O retorno dessa função é o tamanho, em bytes, reservados à tipologia ou à variável. No exemplo acima associa o valor 1 a “a” porque é um char.

Este operador permite determinar a quantidade de memória que é reservada para cada tipologia de variável

#include <iostream>
using namespace std;
int main(void)
{
cout << "Size of short is " << sizeof(short) << "\n"; /* estamos a chamar o operador sizeof e inserimos como parâmetro a tipologia short */
system (“pause”);
return 0;
}