Академический Документы
Профессиональный Документы
Культура Документы
Classes de Armazenamento
Inicialização de variáveis
As constantes são valores fixo colocados em uma variável e em C elas são bem
definidas:
Constantes que possuem um caractere (char) são definidas dentro de aspa simples
(‘ ‘).
Constantes do tipo int podem ter os modificadores short, long e unsigned.
unsigned int - valores de 0 a 65.535 (16 bits).
unsigned short int - O mesmo que unsigned int.
int - Valores de -32.767 a 32.767 (16 bits).
signed int - O mesmo que int.
short int - O mesmo que int.
signed short int - O mesmo que int.
long int - -2.147.483.647 a 2.147.483.647 (32 bits)
signed long int - O mesmo que long int.
unsigned long int - 0 a 4.294.967.295.
Hexadecimais e Octais
Strings
Strings são conjuntos de caracteres dentro de aspas duplas. por exemplo “oi eu sou
goku”.
Se você escrever “a”, está escrevendo uma string de um caractere, agora se
escrever com aspas simples ‘a’, está escrevendo uma constante de um único
caractere
Operadores
int x;
char ch;
ch = x;
x = y = z = 0;
Operadores Aritméticos:
x++;
ou
++x;
x = 10;
y = ++x; // o Y recebe o valor 11, enquanto X recebe o valor 11.
x=10;
y = x++; // o Y recebe o valor 10, enquanto x recebe o valor 11.
>;
<;
>=;
<=;
==;
!=;
&&
||;
!.
O C não dispõe de um XOR (Ou exclusivo), mas é possível cria-lo com a seguinte
função:
Operadores bit a bit utilizam cada bit da variável. Pelo meu entendimento, essa
funcionalidade é muito utilizada em assembly, desse modo como substituto o C
precisa suportar todas as operações deste.
Operações bit a bit podem ser utilizadas para calcular bits de paridade, receber bits
de um dispositivo externo, como modem ou teclado, criptografar arquivos e até
compactá-los com algum algoritmo.
Ele possui operadores lógicos e de deslocamento, mas como vejo pouca utilidade
para isso agora, não vou explanar sobre o assunto.
Operador “?”
Esse operador pode substituir um if-else de maneira bem simples. Ele segue a
estrutura:
int x = 1;
intx y;
Se X for maior que 9, então retornará 100, se X for menor que 9, retornará 200.
Nesse caso, y receberá o valor 200 porque 1 é menor do que 9.
Ponteiro é o endereço de memória onde uma variável está localizada. Uma variável
que guarda o endereço desse uma certa variável na memória. Ponteiros tem 3
funções principais em c:
- Fornecer uma maneira rápida de referenciar elementos em uma matrix;
- Permitir que funções modifiquem as variáveis passadas como parâmetro;
- Suportar listas encadeadas e estruturas dinâmicas de dados;
o & é um operador unário que retorna o endereço de memória de uma variável.
unário significa que ele suporta retornar o valor de uma variável por operação:
int x=0;
int y;
y = &x;
int x = 0;
int *y = &x;
int z = *y;
O sizeof retorna o espaço que a variável ocupa em bytes. O tamanho das variáveis
pode mudar de acordo com o sistema em que o programa está rodando e isso pode
gerar problemas em aplicações que exijam tamanhos definidos, como um banco de
dados que só aceita inteiros de 2 bytes. Se aparece um computador que registra
inteiros com 3 bytes, o programa irá apresentar erro. Desse modo, usar o sizeof para
testar os tamanhos das variáveis poderá gerar testes que impeçam ou solucionem
erros:
int x=0;
float f=1.2f;
char c='s';
double d = 1.2;
Retorna os valores de uma variável do tipo inteiro, float, char, double e int
novamente. observe que não é necessário parênteses para usar o sizeof em uma
variável, mas é obrigatório em um tipo primitivo, como mostrado na última linha
“sizeof (int)”. Curiosamente os valores testados no meu computador foram:
x-4
f-4
c-1
d-8
int - 4
O operador vírgula “,” serve para desencadear várias atribuições de valor em uma só
linha, é como dizer: “faça isso, agora isso, então isso, isso aqui agora …”. com no
exemplo
int x,y;
x = (y=3, y+1);
Nesse caso, y recebe o valor de 3 e X recebe o valor 4. Perceba que o valor que X
recebe sempre será o resultado da sentença mais à direita. Abaixo vou reescrever o
código de outra maneira, mas que vai dar o mesmo resultado:
int x,y;
y = 3;
x = y+1;
Perceba que “y+1” está gerando o resultado 4, mas esse valor é atribuído apenas
para X, y continua com o seu valor 3 inalterado. O operador vírgula pode ser usado
quantas vezes quiser:
int x,y, z;
x = (y=3, z=1, y+100, y+1);
printf ("x = %d, Y = %d e z= %d", x, y, z);
No código acima, veja que x só receberá o valor da última operação (y+1). enquanto
y+100 serve para nada. Ao fim, x=4, y=3 e z=1.
Um detalhe importante é que o operador de atribuição “=” tem maior prioridade que o
operador vírgula “,”, então, se os parênteses forem removidos da operação, X iria ser
igual a 3, pois o compilador iria atribuir o valor da operação mais próxima dele.
struct empregado {
char nome[80];
int idade;
float salario;
} emp;
emp.salario = 1000.0f;
p->salario = 500.0f;
x = F1() + F2();
Na função acima, x receberá o resultado de F1 somado ao resultado de F2, mas isso
não significa que a função F1 será executada antes da função F2, por isso é
importante evitar que uma função necessite da execução da outra em uma operação
dessas.
Casts
(float) x/2;
Espaçamentos e parênteses
C reduzido
x = x+1;
x += 1;
int x, y, z, a;
x = 10;
y = 5;
z = 100;
a = -1;
x += -9;
y -= 4;
z /= 100;
a *= -1;
Verdadeiro ou Falso em C
Comandos de Seleção
if (condição) comandos;
else comandos;
if (0) x++;
else x--;
O comando acima sempre executará o else, pois 0 representa falso. Essa premissa
pode ser utilizada para economizar código caso os operadores da condição possam
assumir valores numericos.
É comum a utilização de ifs e elses aninhados e em casos onde existem muitos
deles, a estrutura pode ficar bem feia esteticamente, por isso, gerlamente os
programadores aninham esses if-else-if da seguinte maneira:
if (condição)
comando;
else if (condição)
comando;
else if (condição)
comando;
else if (condição)
comando;
else comando;
Ainda falando de estilos, a expressão seguinte pode ser reescrita sem a condicional:
int b = -1;
if (b != 0) printf (“b não é zero”);
O codigo acima não é um código considerado bom, pois é redundante e pode ser
reescrito assim:
int b = -1;
if (b) printf (“b não é zero”);
o condicional if precisa de um valor zero para falso e diferente de zero para positivo,
desta forma, qualquer número de b que não for zero vai acionar a mensagem “b não
é zero”, caso b assuma o valor zero, essa mensagem não é executada e caso exista
um else aninhado a esse if, ele será executado.
O comando switch, diferente do if não trabalha com verdadeiro e falso, mas testa se
o valor base corresponde aos mesmos valores do case. Um detalhe interessante é
que se não usar o break dentro de um case, o programa continua testando os
próximos cases até o switch terminar.
Outra característica interessante é que você pode deixar cases sem comandos.
nesse caso ele executará o comando do primeiro case que possuir algum comando:
int i=1;
switch (i){
case 1:
case 2:
case 3:
i++;
break;
case 4:
i--;
break;
}
Comandos de Interação