Вы находитесь на странице: 1из 5

Formato

Declaraciones
Waldo E. Valenzuela P.

Declaracin bsica.
Tipo lista_de_nombres.

Ejemplos:
int i; char letra1, letra2, letra3; unsigned short direccion;

waldovalenzuela@udec.cl

Todas las declaraciones terminan con ;


El ; es el TERMINADOR de lnea en C.

2011 Waldo Valenzuela

2011 Waldo Valenzuela

Nombres
Se pueden incluir maysculas, minsculas, nmeros, _
No pueden comenzar con un digito.

Inicializacin de variables
Asignacin de valor inicial.
int I = 15; char letra1 = A, letra2, letra3; unsigned short direccion = 0x3F65; unsigned numero = 034;

C distingue entre maysculas y minsculas.


Abc ABc ABC abc

Longitud ilimitada.
Estndar permite ignorar caracteres > 31

2011 Waldo Valenzuela

2011 Waldo Valenzuela

Inicializacin de variables
Un byte Dir. 0 Dir. 1 Dir. 2 15230

Variables en memoria
I: entero (4 bytes)
Valor inicial: 00000015
Un byte

int a;//en direccin 2

letra1: caracter (1 byte)


Valor inicial: A

I letra1 letra2 letra3 direccion

int b=20;//en direccin 23

Dir. 23

6958

letra2, letra3: caracter


Valor inicial indeterminado

direccion: short (2 bytes)


Valor inicial: 0x3F65

numero: entero (4 bytes)


Memoria
2011 Waldo Valenzuela

numero

Valor inicial: 034


5 2011 Waldo Valenzuela

00 00 00 15 A ?? ?? 3F 65 00 00 00 034 Memoria6

(2n bytes)

Largo de memoria de 8 bits

Declaracin de Vectores
Vectores unidimensionales.
int vector[20]; Vector de 20 elementos (vector[0] a vector[19])
Numeracin de vectores siempre comienza en 0.

typedef
Mecanismo que permite definir nuevos nombres para tipos de datos.
typedef ushort unsigned short; ushort corto, mascorto;

Acceso directo a elementos.


Vector[5] = 10;

El compilador no verifica limites.


Que pasa si se accesa vector[30]?

Simplifica el cdigo.
Facilita los cambios de tipos de datos.

2011 Waldo Valenzuela

2011 Waldo Valenzuela

Alcance de una variable


Seccin de cdigo donde una variable es valida.
Alcance a nivel de bloque. Alcance a nivel de archivo. Nombres de variables en un alcance deben ser nicos. Es posible que variables de un mismo nombre existan en alcances diferentes.

Alcances en el cdigo
int a; { int f; { int f, g, i; } { int i; } }
9 2011 Waldo Valenzuela

Colores indican alcances de las variables


a tiene alcance de archivo f, g, i tienen alcance al bloque verde i tiene alcance al bloque rojo f tiene alcance al bloque azul
10

2011 Waldo Valenzuela

Alcances de bloques
Bloque: secuencia de cdigo delimitada por llaves { }.
Variable definida al comienzo de un bloque es visible en todo el bloque. Bloques pueden ser anidados. Variable declarada en un bloque interno domina sobre la variable del mismo nombre en el bloque externo.

Alcance de archivo
Identificadores declarados fuera de todo bloque son visibles en todo el archivo
Variables globales Las dos primeras lneas del ejemplo

Todos los nombres de funciones tienen alcance de archivo

2011 Waldo Valenzuela

11

2011 Waldo Valenzuela

12

Ejemplo de declaraciones
#include <stdio.h> int main(void) { int entero = 100; float flotante = 331.79; double doble = 8.44e+11; char caracter = W; _Bool verdad = 0; printf(entero = %d\nflotante = %f\ndoble = %lf\ncaracter = %c\nverdad = %i\n, entero, flotante, doble, caracter, verdad); }

Resultado de la ejecucin
entero = 100 flotante = 331.790009 doble = 844000000000.000000 caracter = W verdad = 0

Ntese que los nmeros de punto flotante se imprimen con 6 decimales Error en flotante?
Representacin interna genera un error

2011 Waldo Valenzuela

13

2011 Waldo Valenzuela

14

C One Liners
Una sola lnea de texto se introduce a la lnea de comandos o shell del sistema operativo para realizar alguna funcin en una sola lnea de entrada. Esto puede ser:
Una expresin escrita en lenguaje de comandos La invocacin de un interprete, junto con la fuente del programa para que este lo ejecute La invocacin del compilador para que este compile y ejecute el programa compilado

C One Liners
Qu hace el siguiente programa de una lnea?
int i;main(){for(;i["] < i;++i){-i;}"];read('-'-'-',i+++"hello, world!\n",'/'/'/'));}read(j,i,p){wri te(j/p+p,i---j,i/i);} Imprime hello, world!
15 2011 Waldo Valenzuela 16

Algunos lenguajes de programacin dinmicos como AWK, sed, y Perl tradicionalmente han sido expertos expresiones mediante One-liners.
2011 Waldo Valenzuela

C One Liners
Qu hace el siguiente programa de una lnea?
#define P(X)j=write(1,X,1) #define C 39 int M[5000]={2},*u=M,N[5000],R=22,a[4],l[]={0,-1,C-1,1},m[]={1,-C,1,C},*b=N,*d=N,c,e,f,g,i,j,k,s;main(){for(M[i=C*R1]=24;f|d>=b;){c=M[g=i];i=e;for(s=f=0;s<4;s++)if((k=m[s]+g)>= 0&&k<C*R&&l[s]!=k%C&&(!M[k]||!j&&c>=16!=M[k]>=16))a[f++]=s;if (f){f=M[e=m[s=a[rand()/(1+2147483647/f)]]+g];j=j<f?f:j;f+=c&16*!j;M[g]=c|1<<s;M[*d++=e]=f|1<<(s+2)%4;}else e=d>b++?b[1]:e;}P(" ");for(s=C;--s;P("_"))P(" ");for(;P("\n"),R-;P("|"))for(e=C;e--;P("_ "+(*u++/8)%2))P("| "+(*u/4)%2);}

C One Liners

2011 Waldo Valenzuela

17

2011 Waldo Valenzuela

18

Вам также может понравиться