C/Variáveis: diferenças entre revisões
[edição não verificada] | [edição não verificada] |
Linha 40: | Linha 40: | ||
|} |
|} |
||
== |
== Atribuição de valores à variáveis == |
||
Nós podemos atribuir um valor |
Nós podemos atribuir um valor à uma variável através do operador de atribuição "=". Vide exemplo: |
||
* [nome da variável] = [valor]; |
* [nome da variável] = [valor]; |
||
* a = 5; |
* a = 5; |
||
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. |
|||
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? |
'''Pergunta''': será que isto é mesmo necessário, ie, declarar a variável antes de atribuir valor? |
Revisão das 22h44min de 16 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 possivel para o computador "memorizar" algo, antes é preciso alocar (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éz 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 sintáxe da declaração de variáveis é [tipo de variável] [nome da variável]; // Note o ponto e virgula 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;
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 uma porção de memória para poder receber o valor que vamos guardar. Esse tamanho depende da tipologia da variável, como também já se disse. 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
|