Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El Lenguaje de Programacion C
El Lenguaje de Programacion C
valc<" \n"
nimero de apariviones de cada palabra en la entrada
ursend\), +p)
1 bicle while le una palabra ce la cadena de entrada estindar ein a buf (36)
¥¥ actualza el contador asociado con é1. Por dltima, se imprime la tabla resultante con las
diferenes palabras de la entrada, cada una zon su nimero de apariciones. Por ejemplo. ded
In enteda
4 bb bb aa aa bb aa aa
el programa producirs
ae: 5
be
Es cil perfeccionar lo antrice y convertil en un tigo de array asocativo adecuado usando
tuna clase de plantila con el operaor de se eccidn [)) sobrecargudo ($11.8). Es incluso ns
ficil usar simpkrmente la biblioteca estdar map ($17.41),
5.6 Punteroa void .
Se puede asignar un puntero de cualquier tipo de ebjeto a una variable de tipo void, se
puede asignar vn void a otro void, se pueden hacer comparsciones de igualdad y des-
‘gualdad entre woid*s y se puede convertr explicitanente un void en otro tipo. Otrasofe=
raciones serfan poco seguras porque el compilador no puede saber @ qué tipo de ahjao se
ea
U7 bien: conversion implica de int® en void*
void pe = pi:
apt Werror: no se puede desreferenciar void*
poses error: no se puede desreferenciar void
ints pid = statie_cast m es equivalente a (+p) .m.
Las objetos de tipos de estructura pueden ser ssignadas, pasados como argumentos de
funcién y devueltos como el resultado de una funcién. Por ejemplo
tireccion actual ;
ireccion actualizar ‘direecion siguiente)
‘
direccien prev = actual;
actual « siguiente:
return prev:
i
(Ouras operacicnes plausibles, como Ia eomparacién (== y !=) no estén defini. Sin
‘argo, el usuari» puede devinir esos operadores (capitulo 11
tama de un jt de un po era no mcrae a su lon
jon de sus miembros. Est se debe a que mthas mauasreguiten qu Los ojetos
‘aman ips sean asignado: en Vimiss dependentes dele arguitetura¢ mane esos
Sejan gon mucha mayor efiknci i estan. 2 ejemplos enteros se asigman 1 me
sadn limes de palabra, En tales msjuinas se lice que ls objetos tienen que esr a
meitanadccuacamente, Esto da ugar a «apujems» on ls estructura, Por ejemo. en
tips miguinas sizeof direcrion| es 24 yn 22 como se pra esperar. El lector pue-
vhnimiza el despilfarre ds espacio sncillamente ordenando los miembos por ato
ttrmer el icinbro mas grande). Sin enbargo, bivalmen ees mejor orden 1s mien
ceerteniendn en cuenta la leiblidad y clasifcrios por tana slo si hay una necesi-
fad demosirada de optimizar.
nombre dun tipo est csponie nara sus) inmediatemente después de queha sido
encntrado, sin esperar aque + haya vsto toda h declarain, Por ejemplo:
strut Link
Links previous
Links Successor:
)
‘Noes posible declarar objetos nuevos de un tipo esrucara hasta que se ha visto toda
Indkclraic, Por ejemplo
struct No_good
‘No_goad member:
h
Exines un error porque el compilador no es capcz de deterninar el tamaio de No_good.
Pars posibiliar que dos (0 més) tipos de estructura se refieran una a otta podemos decla-
rar que un nombre sea el nombee de un tipo de estructura, Por ejempl:
strut List; ia definir mas adelante
struct Link
Link pre
Link sue
List member of;
struct List |
Link head:
error: defimicion recursiva
uso de Listen la declaracn de Link hubiera dado
Sint primera declaracin de List,
Iugar un error de sintaxis
nombre de un tipo de est-uctura puede usare antes de que sea definido el tipo siem-
Pre que ese aso no requiera que se conozca el rambre de wi miembro o el tamaio de la
fstractura, Por ejemplo:
class S$; 'S'e5 el nombre de algun npo
extern S
Sf0;
void gS)St hiS) 5 i
‘Sin enbargo, muchas de las siguientes declaraciones no se pusden usar a menos que se
fina eltipo 8: :
void k(S* p)
Sa W error: sin defnir; es necesari el ramako para asignar
fOr M error: § sin defnir; es necesario e.tamafo por devolver valor
rac Mesror: sin defnir; es recesario tana para pasar argumenog
p-2m=7; error: 8 sindefnir; noabre de miombro 20 conocido
/ bien: se pueten asigna’ y pasar panteros
error: S sin definir: noubre de izmbro ao conocido
{Una stuct es forma sensilla dels (capil 1)
Porrazones que se remontan la preisoria de, es pose dectray una struct y “4
oresiucturaconel mismo nombre ene ino dno. Por ekempl
ruck sah CP 2415 !
lat stat (chr name, srt stat= buf):
neste caso, nmbre sme (ta) esel nombre ela o-estctura 9 la estructura bay
ave reerise cone prefo ruc. De fornia semen, se pueden war somo prefs as
Palabras clave lass, unum ($C8.2) y enum (88.8) pa ever ambiguedades. Sin enter
20, es nejor no sebrecaga os nombres y quello no sea ve sari. -
5.7.1 Equivalenda de tipo
Dos exructuras son tipos diferentes aurque tengan los mismes miesrbros. Por ejerapla,
sruct $1 ( wt a; ):
sruct S2 ( wit a;
‘son do: tipos diferentes, por tanto
Stx;
Sy=x; error: discordancia de tipo
Los tipos de esructuras son también diferentes de los tipos fndameatales, por tanto
Six;
nine;
Toda suet debe ener una dnica definicién en un programs (§9.2.3)
error: discordancia de tipo
5.8 Consejos
[1] Brite ta arimética no trivial de punters: $5.3,
[2] Tenga cuidato de ro escribir més all de los limites de an array; §5.3,1
[3] We Oen lugar de MULL: $5.1.
[4] Ue vector y valarray en lugar de antays predefinides ‘estilo Cy $5.3.
rr
{5}__Use string en lugar de arays de char terminals por un cer: 53.
[oq Reduzca al minimo el uso de argimentos de referencia simples: $5.
[11 Evite void= salvo en e6digo de tj nivel 85.6.
[BI Evite fs iterales no triviales («nimeros migicos»! ene
defina y use constantes simbsliess: §4.8. $54,
59 Ejercicios
1. Cl) Esotba declaraciones para fo Sguiente: an puntero a un carécter un armray de 10
fetes, ana referencia & u1 array de 10 entems, un puntero a'un aray de cadenas de
‘racers, un punto 8 un punteroa un earécter. un entero constan‘e, un puntero aun
‘entero censtinte y un puntero constante un enter. Iniealicelos todos.
2, C15) :Cudles son, en us stema, ls restiesiones de los tips de pantero ehar®,int*
{yvoid? Por ejemplo, ,puede un int* tener valor impar? Pista: alineacibn
43, (ol) Use sypedef para defiic los ipos unsigred char, cons unsigned char, puntero a
fnlero, pantero a puntero ¢ char, gantero a atays de ehar. array de 7 puntercs ai
funtero « un array de 7 punteros aint y array de 8 arrays de 7 punteros a int.
4. C1 Esciba una funcidn que permate(intercambie los va‘ores de) des enteros. Use int
‘como tipo del argumento, Escriba ora funciSy de permutacin usard ints: come tipo
&! argument.
5. (LS) Cuil es ef tamato del array str en el ejemplo
char str
{Ludl esl longtud de la cadena ‘una eadera corta”’?
6. Ch Detina funciones f(ehar) .g chars) y 4 const chars}. Liémelas con los argu
rnentos 'a" 49, 3300, ¢, ue yse, sendo ¢ unehar, ue un unsigned char y se ut signed
‘har. :QuéHlamadas sen legales? Qué Hamedas hacen que el compilador intraduzca
tna Vareble temporal?
7. (115) Defina una tabla con los nombres de Ins meses del ato y el mimero de dias de
cada mes. Esriba esa tabla, Hagalo dos veces: una .sando un array de ehar para los
rmombresy un array para ef nimere de dias, y otra usando un array de estructuas, cada
tna de ellas con el nombre de un ms y su rtmero de dias
8. (2) Ejecute pruebas para ver si su compilacor genera realmente eéiz0 equivalente
fara iteracn usando panterose iteracién usando indexacisn (85.3.1). Si es posible so
leita diferentes grados de optimizcién, ver si ello aecta a la calitad del e6digo ge
rerado yen qué modo,
9. (1.5) Ereuenire un ejemplo en el gue tend sentido usar un aomb en su prio ini
Salizader:
10.(+1) Defina un array de cadenas en el que ls cadens contengan bs rombres4e los
Ineses Imprima esas caderas. Pase el array ana furcicn que imprima esas eacenas.
(2) Lea une secuencia de palabras de la entrula. Use Quit como polakra que finaliza
Ia entrada. Imprim las palabras en el ordes en que fueton introduzides. No imprima
singuna palebra dos veces. Modifique el prog-ama para clasifcar las palabras antes de
inprimitias
'2.(-2) Eseriba una funcidn cue cuente el nvimero de aparciones de un par de letras en
‘una cadena corta":
1