Sei sulla pagina 1di 12

ltima modificacin 28/03/2007 09:24

CAPITULO 1
Conc!to" #$"ico" d C
Idntificado%"& !ala#%a" %"%'ada"& "!a%ado%" ( comnta%io"
Un idntificado% " )na "c)ncia d lt%a" o d*+ito" dond l !%im% lmnto d# "% )na lt%a& o lo"
ca%act%" , ( -. La" lt%a" ma(/"c)la" ( min/"c)la" " con"id%an di"tinta". Lo" idntificado%" "on lo"
nom#%" 0) " )tili1an !a%a %!%"nta% 'a%ia#l"& con"tant"& ti!o" ( f)ncion" d )n !%o+%ama. 2l
com!ilado% "lo %conoc lo" 32 !%im%o" ca%act%" dl idntificado%& !%o 3"t !)d "% d c)al0)i%
tama4o.
2l ln+)a5 C di"tin+) nt% lt%a" ma(/"c)la" ( min/"c)la". Po% 5m!lo& l idntificado% 'alo% "
di"tinto a lo" idntificado%" 6ALO7 ( 6alo%
La" !ala#%a" %"%'ada" "on idntificado%" !%dfinido" 0) tinn )n "i+nificado "!cial !a%a l
com!ilado% d C. La" !ala#%a" cla'" "im!% 'an n min/"c)la". 2n la Ta#la 1.1 " %co+n la" !ala#%a"
%"%'ada" "+/n A89I C& 0) " la dfinicin "tanda%i1ada dl ln+)a5 C c%ada !o% l In"tit)to
8acional Am%icano d 2"t$nda%" :A89I;.
a)to do)#l int "t%)ct
#%a< l" lon+ "=itc>
ca" n)m %+i"t% t(!df
c>a% ?t%n %t)%n )nion
con"t float ">o%t )n"i+nd
contin) fo% "i+nd 'oid
dfa)lt +oto "i1of 'olatil
Pgina 1 de 12 page_04 OCW UNED
17/09/2014 http://oc!inno"a!#ned!e$/oc#ni"e%$ia/&ng_tecnico_in'o%_$i$te(a$/)O_&&/contenido$!!!
co if "tatic =>il
Ta#la 1.1: Pala#%a" %"%'ada" "+/n l "t$nda% A89I C
2l ln+)a5 C tam#i3n )tili1a )na "%i d ca%act%" como lmnto" "!a%ado%": @&A&B&C&:&;&D&EF&..
2n C " !o"i#l "c%i#i% comnta%io" como )na "c)ncia d ca%act%" 0) " inicia con /G ( t%mina con
G/. Lo" comnta%io" "on i+no%ado" !o% l com!ilado%.
Con"tant"
La" con"tant" " %fi%n a 'alo%" fi5o" 0) no " !)dn alt%a% !o% l !%o+%ama. 2l ln+)a5 C tin
c)at%o ti!o" #$"ico" d con"tant":
1. 2nt%a". 2" )n n/m%o con )n 'alo% nt%o& con"i"tnt n )na "c)ncia d d*+ito". La" con"tant"
nt%a" " !)dn "c%i#i% n t%" "i"tma" n)m3%ico" di"tinto": dcimal& octal ( >?adcimal.
2. 2n coma flotant. 2" )n n/m%o dcimal 0) contin )n !)nto dcimal o )n ?!onnt :o am#o";.
3. H ca%$ct%. 2" )n "lo ca%$ct% nc%%ado con comilla" "im!l".
4. H cadna" d ca%act%". Con"ta d c)al0)i% n/m%o d ca%act%" con"c)ti'o" nc%%ado" nt%
comilla" do#l".
9 dnomina "c)ncia d "ca! a )na com#inacin d ca%act%" 0) comin1a "im!% con )na #a%%a
inclina >acia at%$" I ( " "+)ida !o% )no o m$" ca%act%" "!cial". Una "c)ncia d "ca! "im!%
%!%"nta )n "lo ca%$ct% & a/n c)ando " "c%i#a con do" o m$" ca%act%". 2n la Ta#la 1.2 " li"tan la"
"c)ncia" d "ca! )tili1ada" m$" f%c)ntmnt:
Ca%$ct% 9c)ncia d "ca!
9onido :al%ta; Ia
Ta#)lado% >o%i1ontal It
Ta#)lado% '%tical I'
8)'a l*na In
Comilla" IJ
Comilla "im!l IK
La%%a inclinada >acia at%$" II
Pgina 2 de 12 page_04 OCW UNED
17/09/2014 http://oc!inno"a!#ned!e$/oc#ni"e%$ia/&ng_tecnico_in'o%_$i$te(a$/)O_&&/contenido$!!!
9i+no d int%%o+acin IM
8)lo I0
Ta#la 1.2: 9c)ncia" d "ca!
1. 25m!lo 1.2:
0 1 743 N280 327O7 9999 :Con"tant" nt%a" dcimal";
0? 0P 0P7QQQ 0?a#cd :Con"tant" nt%a" >?adcimal";
0.1 1.0 827.O02 22E8 1.OOO212 :Con"tant" n coma flotant;
KAK KPK KMK K K KdK :Con"tant" d ca%$ct%;
J6%dJ JLa %"!)"ta co%%cta "J :Con"tant" d cadna d ca%act%";
La" con"tant" " dcla%an colocando l modificado% con"tdlant dl ti!o d dato". Ot%a fo%ma d dfini%
con"tant" " )"ando la di%cti'a d com!ilacin Rdfin.
1. 25m!lo 1.3:
La "i+)int "ntncia dcla%a la con"tant SAPISO d ti!o nt%o 0) " iniciali1ada al 'alo% 9.
con"t int SAPISOT9D
Ot%a fo%ma 0)i'alnt d dcla%a%la " con la "ntncia:
Rdfin SAPISO 9
2"ta "ntncia " 5c)ta d la "i+)int fo%ma: 2n la fa" d com!ilacin al 5c)ta% Rdfin l
com!ilado% ")"tit)( cada a!a%icin d SAPISO !o% l 'alo% 9. Adm$" no " !%mit a"i+na% nin+/n
'alo% a "a con"tant . 2" im!o%tant da%" c)nta 0) "ta dcla%acin no aca#a n !)nto ( coma KDK
6a%ia#l"
Una 'a%ia#l " )n idntificado% 0) " )tili1a !a%a %!%"nta% ci%to ti!o d info%macin dnt%o d )na
dt%minada !a%t dl !%o+%ama. 2n ") fo%ma m$" "ncilla& )na 'a%ia#l " )n idntificado% 0) " )tili1a
!a%a %!%"nta% )n dato indi'id)alD " dci%& )na cantidad n)m3%ica o )na con"tant d ca%$ct%. 2n
al+)na !a%t dl !%o+%ama " a"i+na l dato a la 'a%ia#l. 2"t 'alo% " !)d %c)!%a% d"!)3" n l
!%o+%ama "im!lmnt >acindo %f%ncia al nom#% d la 'a%ia#l.
A )na 'a%ia#l " l !)dn a"i+na% dif%nt" 'alo%" n di"tinta" !a%t" dl !%o+%ama. H "ta fo%ma la
info%macin %!%"ntada !)d cam#ia% d)%ant la 5c)cin dl !%o+%ama. 9in m#a%+o& l ti!o d dato"
a"ociado a la 'a%ia#l no !)d cam#ia%.
Pgina 3 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
La" 'a%ia#l" " dcla%an d la "i+)int fo%ma:
ti!o nom#%,'a%ia#lD
Hond ti!o"%$ )n ti!o d dato" '$lido n C con lo" modificado%" nc"a%io" ( nom#%,'a%ia#l "%$ l
idntificado% d la mi"ma.
La" 'a%ia#l" " !)dn dcla%a% n dif%nt" !)nto" d )n !%o+%ama:
1. Hnt%o d f)ncion". La" 'a%ia#l" dcla%ada" d "ta fo%ma " dnominan 'a%ia#l" local".
2. 2n la dfinicin d f)ncion". La" 'a%ia#l" dcla%ada" d "ta fo%ma " dnominan !a%$mt%o" fo%mal".
3. Q)%a d toda" la" f)ncion". La" 'a%ia#l" dcla%ada" d "ta fo%ma " dnominan 'a%ia#l" +lo#al".
La iniciali1acin d )na 'a%ia#l " d la fo%ma:
nom#%,d la 'a%ia#lT con"tantD
Hond con"tantd# "% dl ti!o d la 'a%ia#l.
1. 25m!lo 1.4:
/GHcla%acin d 'a%ia#l"G/
c>a% lt%aD
int nt%oD
float %alD
/GIniciali1acin d 'a%ia#l"G/
lt%aTKaKD /G9 )"an comilla" "im!l"G/
nt%oT234D
%al T123.333D
Ti!o" f)ndamntal" d dato"
2n l ln+)a5 C " con"id%an do" +%and" #lo0)" d dato":
1. Ti!o" f)ndamntal": 0) "on ")mini"t%ado" !o% l ln+)a5.
2. Ti!o" d%i'ado"& 0) "on dfinido" !o% l !%o+%amado%.
Lo" ti!o" f)ndamntal" " cla"ifican n:
1. Ti!o" nt%o". 9 )tili1an !a%a %!%"nta% ")#con5)nto" d lo" n/m%o" nat)%al" ( nt%o".
2. Ti!o" %al". 9 m!lan !a%a %!%"nta% )n ")#con5)nto d lo" n/m%o" %acional".
3. Ti!o 'oid. 9i%' !a%a dcla%a% ?!l*citamnt f)ncion" 0) no d')l'n nin+/n 'alo%. Tam#in "i%'
!a%a dcla%a% !)nt%o" +n3%ico".
1. Ti!o" nt%o"
Pgina 4 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
9 di"tin+)n lo" "i+)int" ti!o" nt%o":
1. c>a%. Hfin )n n/m%o nt%o d 8 #it". 9) %an+o " BE128& 127C. Tam#i3n " m!la !a%a %!%"nta% l
con5)nto d ca%act%" A9CII :Cdi+o 2"t$nda% Am%icano !a%a l Int%cam#io d Info%macin;.
2. int. Hfin )n n/m%o nt%o d 1O o 32 #it" :d!ndindo dl !%oc"ado%;.
3. lon+. Hfin )n n/m%o nt%o d 32 o O4 #it".
4. ">o%t. Hfin )n n/m%o nt%o d tama4o mno% o i+)al 0) int. 2n +n%al " c)m!l 0): tama4o
:">o%t; : tama4o:int; : tama4o:lon+;.
Lo" c)at%o !%im%o" ti!o" !)dn i% !%cdido" dl modificado% )n"i+nd 0) indica 0) l ti!o "lo
%!%"nta n/m%o" !o"iti'o" o l c%o.
1. 25m!lo 1.N:
int n)m%oT3D
c>a% lt%aTKcKD
)n"i+nd ">o%t contado%T0D
Con la" ant%io%" "ntncia" " >an dcla%ado la 'a%ia#l n)m%o d ti!o int iniciali1ada a 3& la 'a%ia#l
lt%a d ti!o c>a% iniciali1ado a KcK ( la 'a%ia#l contado% d ti!o )n"i+nd ">o%t iniciali1ado a 0.
2. Ti!o" %al"
9 di"tin+)n lo" "i+)int" ti!o" %al":
1. float. Hfin )n n/m%o n coma flotant d !%ci"in "im!l. 2l tama4o d "t ti!o ")l "% d 4
#(t" :32 #it";.
2. do)#l. Hfin )n n/m%o n coma flotant d !%ci"in do#l. 2l tama4o d "t ti!o ")l "% d 8
#(t" :O4 #it";. 2"t ti!o !)d i% !%cdido dl modificado% lon+& 0) indica 0) ") tama4o !a"a a "%
d 10 #(t".
3. 25m!lo 1.O:
float +ananciaT12N.23D
do)#l diamt%oT12.32N3D
Con la" ant%io%" "ntncia" " >an dcla%ado la 'a%ia#l +anancia d ti!o float iniciali1ada a 12N.3 ( la
'a%ia#l diamt%o d ti!o do)#l iniciali1ada a K12.32N3K.
Ti!o" d%i'ado" d dato"
Lo" ti!o" d%i'ado" " con"t%)(n a !a%ti% d lo" ti!o" f)ndamntal" o d ot%o" ti!o" d%i'ado". 9 'an a
d"c%i#i% la" ca%act%*"tica" d lo" "i+)int": a%%a("& !)nt%o"& "t%)ct)%a" ( )nion".
3. A%%a("
Un a%%a( " )na colccin d 'a%ia#l" dl mi"mo ti!o 0) " %f%ncian !o% )n nom#% com/n. 2l
com!ilado% %"%'a "!acio !a%a )n a%%a( ( l a"i+na !o"icion" d mmo%ia conti+)a". La di%ccin m$"
#a5a co%%"!ond al !%im% lmnto ( la m$" alta al /ltimo. 9 !)d accd% a cada lmnto d )n
Pgina 5 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
array con un ndice. Los ndices, para acceder al array, deben ser variables o constantes de tipo entero. Se
define la dimensin de un array como el total de ndices que necesitamos para acceder a un elemento
particular del array.
La definicin formal de una array N-dimensional es la siguiente:
tipo_array nombre_array rango
!
" rango
!
"... rango
N
"#
$ los arrays unidimensionales se les denomina vectores, y a los bidimensionales se les denomina matrices.
$ los arrays unidimensionales de tipo c%ar se les denomina cadena de caracteres, y a los arrays de
cadenas de caracteres &matrices de caracteres' se les denomina tablas.
(ara inde)ar los elementos de un array, se debe tener en cuenta que los ndices deben variar entre * y
+-!, donde + es el tama,o de la dimensin a la que se refiere el ndice.
!. -.emplo !./:
La declaracin de una variable denominada matri0_$ de n1meros de tipo float de dos filas y dos columnas
sera de la siguiente forma:
float matri0_$2"2"#
La declaracin de una variable denomina 3 que es un vector de 4 n1meros de tipo int sera de la siguiente
forma:
int 34"#
(ara el vector 3 anteriormente declarado, el ndice variar5 entre * y 6: 3*", 3!", 32", 36"#
4. (unteros
7n puntero es una variable que es capa0 de guardar una direccin de memoria, dic%a direccin es la
locali0acin de otra variable en memoria. $s, si una variable $ contiene la direccin de otra variable 8
decimos que $ apunta a 8, o que $ es un puntero a 8.
Los punteros se definen en base a un tipo fundamental o a un tipo derivado. La declaracin de un puntero
se reali0a de la siguiente forma:
tipo_base 9puntero#
Los punteros una ve0 declarados contienen un valor desconocido. Si se intenta usar sin iniciali0ar
podemos incluso da,ar el sistema operativo. La forma de iniciali0arlos consiste en asignarles una
direccin conocida.
-)isten dos operadores que se utili0an para traba.ar con punteros:
!. -l operador :, da la direccin de memoria asociada a una variable y se utili0a para iniciali0ar un puntero.
2. -l operador 9, se utili0a para referirse al contenido de una direccin de memoria.
Pgina 6 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
6. -.emplo !.;:
Supngase la siguiente sentencia
int 90#
Se trata de la declaracin de la variable puntero 0, que contiene la direccin de memoria de un n1mero de
tipo int.
Supngase a%ora las siguientes tres sentencias:
int 0, 9p0#
p0<:0#
9p0<2=#
La primera sentencia est5 declarando un variable 0 de tipo entero y una variable puntero p0 que contiene
la direccin de una variable de tipo int.
La segunda sentencia, iniciali0a la variable puntero p0 a la direccin de la variable 0.
(or 1ltimo la tercera sentencia es equivalente a la sentencia >0<2=#>. $ trav?s de p0 se puede modificar de
una forma indirecta el valor de la variable 0.
-n la @igura !.2 se representa la relacin entre el puntero p0 y la variable 0.
@igura !.2:Aelacin entre el puntero p0 y la variable 0
-l acceso a una variable a trav?s de un puntero se conoce tambi?n como indireccin. Bbviamente antes
de manipular el contenido de un puntero %ay que iniciali0ar el puntero para que referencie a la direccin
de dic%a variable.
-n general no tiene sentido asignar un valor entero a una variable puntero. (ero una e)cepcin es la
asignacin de *, que a veces se utili0a para indicar condiciones especiales. -n tales situaciones, la
pr5ctica recomendada es definir una constante simblica N7LL que representa el valor * y usar N7LL en
la iniciali0acin del puntero. 7n e.emplo de esta forma de iniciali0acin es
Cdefine N7LL *
float 9pv<N7LL#
(or otra parte, los punteros admiten las operaciones de incremento, decremento, suma de una constante
entera y diferencia de punteros. $l reali0ar estas operaciones se est5 modificando la direccin a la que
apunta el puntero.
Pgina 7 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
Los punteros son usados frecuentemente en D ya que tienen una gran cantidad de aplicaciones. (or
e.emplo, pueden ser usados para transvasar informacin entre una funcin y sus puntos de llamada. -n
particular proporcionan una forma de devolver varios datos desde una funcin a trav?s de los argumentos
de una funcin. Los punteros tambi?n permiten que referencias a otras funciones puedan ser
especificadas como argumentos de una funcin. -sto tiene el efecto de pasar funciones como argumentos
de una funcin dada.
Los punteros est5n muy relacionados con los arrays y proporcionan una va alternativa de acceso a los
elementos individuales del array. Se puede acceder a cualquier posicin del array usando el nombre y el
ndice &inde)acin' o bien con un puntero y la aritm?tica de punteros.
-n general, el nombre de un array es realmente un puntero al primer elemento de ese array. (or tanto, si
) es un array unidimensional, entonces la direccin al primer elemento del array se puede e)presar tanto
como :)*" o simplemente como ). $dem5s la direccin del segundo elemento del array se puede escribir
tanto como :)!" o como &)E!', y as sucesivamente. -n general, la direccin del elemento &iE!' de la
formacin se puede e)presar bien como :)i" o como &)Ei'.
!. -.emplo !.F:
float vector="#
float 9p<vector# G9Hniciali0acin del puntero9G
9p<!*.2# G9-sta sentencia equivale a vector*"<!*.29G
p<pE6#
9p<*.= # G9-sta sentencia equivale a vector6"<*.=9G
-l anterior con.unto de sentencias muestra como es posible acceder a los elementos del array vector que
consta de = elementos a trav?s del puntero p.
Hndicar que otra forma de iniciali0acin del puntero p es usando la direccin de la primera posicin del
array
float p<:vector*"#
=. -structuras
7na estructura es un agregado de tipos fundamentales o derivados que se compone de varios campos. $
diferencia de los arrays, cada elemento de la estructura puede ser de un tipo diferente. La forma de
definir una estructura es la siguiente:
struct nombre_estructura
I
tipo! campo!#
Pgina 8 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
tipo2 campo2#
...
tipoN campoN#
J
(ara acceder a los campos de una estructura se utili0a el operador >.>.
-s posible declarar:
!. $rrays de estructuras.
2. (unteros a estructuras. -n este caso, el acceso a los campos de la variable se %ace por medio del
operador >-K>.
$dem5s, puesto que el tipo de cada campo de una estructura puede ser un tipo fundamental o derivado,
tambi?n puede ser otra estructura. Don lo que es posible declarar estructuras dentro de estructuras.
!. -.emplo !.!*:
struct clienteI
int cuenta#
c%ar nombre!**"#
unsigned s%ort dia#
unsigned s%ort mes#
unsigned int a,o#
float saldo#
J
struct cliente uno#
La variable uno es una variable declarada del tipo struct cliente. Don la sentencia
uno.cuenta<!2=6*#
Se est5 asignando al campo cuenta de la estructura uno el valor !2=6*.
!. -.emplo !.!!:
Sea la siguiente declaracin de una estructura
struct
I
Pgina 9 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
float real, imaginaria#
J vectorD="#
La variable vectorD es un array unidimensional de n1meros comple.os. (ara modificar la parte real del
elemento 2 &recu?rdese que loe elementos de un array se comien0an a numerar por el *', se escribe la
sentencia:
vectorD!".real<*.26#
!. -.emplo !.!2:
Supngase a%ora la siguiente declaracin de una estructura:
struct altura
I
c%ar nombre!**"#
float %#
J#
struct altura persona, 9p#
p<:persona#
p-K%<!.L=#
-l puntero p apunta a la estructura persona del tipo altura Don la 1ltima sentencia se est5 asignando al
campo % de la estructura persona el valor !.L=. -sa sentencia es equivalente a
persona.%<!.L=#
!. -.emplo !.!6:
7n e.emplo de una estructura declarada dentro de una estructura sera:
struct fec%a
I
int da, mes, a,o#
J
struct alumno
I
Pgina 10 de 12 page_04 OCW UNED
17/09/2014 http://o!"inno#a"$ned"e%/o!$ni#e&%ia/'ng_tenio_in(o&_%i%te)a%/*O_''/ontenido%"""
char nombre[100];
struct fecha fecha_nacimiento;
float nota;
};
struct alumno alumno;
6. Uniones
Las uniones se definen de forma parecida a las estructuras y se emplean para almacenar en un mismo
espacio de memoria variables de distintos tipos. La declaracin de una unin es la si!uiente"
union nombre_unin
#
tipo1 campo1;
tipo$ campo$;
...
tipo% campo%;
};
&l tama'o de la unin va a ser i!ual al tama'o del mayor de sus campos.
1. &(emplo 1.1)"
union multiuso
#
float numero*;
int numero+;
char letra;
};
,on la variable multiuso se pueden hacer las si!uientes asi!naciones"
multiuso.numero*-0.1$./;
multiuso.numero+-0$$/;
multiuso.letra-1(1;
Pgina 11 de 12 page_04 OCW UNED
17/09/2014 http://oc!inno"a!#ned!e$/oc#ni"e%$ia/&ng_tecnico_in'o%_$i$te(a$/)O_&&/contenido$!!!
2. 3lias para los nombres de tipo
&s posible hacer 4ue un identificador sea considerado el nombre de un nuevo tipo5 para ello hay 4ue
emplear la palabra clave typedef5 con ella es posible actuar sobre cual4uier tipo fundamental o derivado.
1. &(emplo 1.1/"
typedef int entero;
entero y;
,on la definicin de entero como sinnimo de int5 es posible declarar variables de tipo entero.
Pgina 12 de 12 page_04 OCW UNED
17/09/2014 http://oc!inno"a!#ned!e$/oc#ni"e%$ia/&ng_tecnico_in'o%_$i$te(a$/)O_&&/contenido$!!!

Potrebbero piacerti anche