C/Variables: Diferenzas entre revisións

Contido eliminado Contido engadido
Gallaecio (conversa | contribucións)
m Continúo coa tradución
Gallaecio (conversa | contribucións)
Continúo a tradución (sigo traducindo, pero gardo por se acaso)
Liña 3:
Coma a maioría das linguaxes de programación, C é quen de usar e procesar as chamadas variables e mailo seu contido. As '''variables''' son simples verbas usadas para referirse a unha localización na memoria - unha localización pode conter un valor co que esteamos a traballar.
 
Axudaría pensar nas variables coma aquelas que lle gardan un sitio a un valor. Podes pensar nunha variable como aquilo que equivale ao seu valor. Polo tanto, se tes unha variable <codett>i</codett> que recibe o valor <codett>4</codett>, entón <codett>i+1</codett> será equivalente a <codett>5</codett>.
 
Posto que C é relativamente unha linguaxe de programación de baixo nivel, antes de que un programa en C poida utilizar memoria para almacenar unha variable debe reclamar a memoria requerida para almacenar os valores desa variable. Isto faise ao '''declarar''' variables. Declarar variables é a forma que ten un programa en C para amosar o número de variables que precisa, o nome que van ter, e a cantidade de memoria que necesitarán.
Liña 12:
 
==Declarar, inicializar e asignar variables==
No seguinte exemplo declararase un número enteiro (''integer'' en inglés), que chamaremos <codett>numero_calquera</codett>. Non esquezas facer fincapé no punto e coma en que remata a liña, pois así rematarán todas as declaracións.
 
'''<font style="color:#1b991b">int</font>''' numero_calquera;
 
Esta declaración significa que estamos a reservar espazo para unha variable chamada <codett>numero_calquera</codett>, a cal será usada para almacenar datos dun número enteiro (''<codett>int</codett>teger'' en inglés). Nótese que temos que especificar o tipo de datos que almacenará a variable. Hai palabras clave específicas para facer isto, e verémolas a continuación.
 
Pódense declarar múltiples variables cunha soa declaración, deste xeito:
Liña 55:
Agora exemplos de variables que non valen:
 
2_cervexas <font style="color:blue">// Non pode comezar cunha cifra</font>
non si <font style="color:blue">// Non se poden usar espazos nos nomes</font>
while <font style="color:blue">// Tampouco valen as palabras clave da linguaxe C, tales coma "for", "if", "else"</font>
Quero_€_e_$ <font style="color:blue">// Carácteres coma € e $ non se poden usar, só letras, números e _</font>
E_logo? <font style="color:blue">// E dalle! "?" non é unha letra, nin un número, nin moito menos _</font>
isto_é_algo <font style="color:blue">// Non, nada de tils, así que nada de á, é, í, ó, ú</font>
pingüin_voador <font style="color:blue">// Nada de lle poñer puntiños enriba ao u</font>
ñu <font style="color:blue">// Dá a casualidade de que o ñ tampouco vale</font>
çà&#... <font style="color:blue">// En fin, ante as dúbidas, comprobade se o que escribides está no '''[[w:Alfabeto_latino#Grafemas fundamentais|alfabeto latino fundamental]]''', é unha cifra ou é '''_'''</font>
 
Como dí o terceiro exemplo, algunhas verbas están reservadas coma parabras clave na linguaxe C, polo que non se poden usar coma nomes de variable.
Liña 78:
Na linguaxe C estándar hai catro tipos básicos de variable:
 
===<codett>int</codett>===
As variables de tipo <codett>int</codett> almacenan números enteiros. O seu tamaño habitual é de 32 bits, aínda que as computadoras de 64 están a extenderse. Exemplos de literais son números enteiros coma 1, 2, 3, 6, 13, 102... Cando un <codett>int</codett> é de 32 bits, pode almacenar calquera número enteiro entre o -2147483648 e o 2147483647. Pero tampouco te preocupes de memorizar isto.
 
Se queres declarar unha nova variable de tipo <codett>int</codett>, utiliza a palabra clave <codett>int</codett>:
 
'''<font style="color:#1b991b">int</font>''' NumeroDePaxinas, i, l=<font style="color:#ff48ff">5</font>;
 
Nesta declaración declaramos tres variables: <codett>NumeroDePaxinas</codett>, <codett>i</codett> e <codett>l</codett>, séndolle a éste último asignado o literal <font style="color:#ff48ff">5</font>.
 
===<codett>char</codett>===
As variables de tipo <codett>char</codett> poden ter como valor calquera carácter. Almacena o mesmo tipo de datos ca un <codett>int</codett>, pero sempre ten un byte (8 bits) de tamaño. Unha variable de tipo <codett>char</codett> úsase habitualmente para almacenar datos de carácteres. A maioría das veces utilízace o sistema [[w:ASCII|ASCII]] para os carácteres, pero disto non hai que preocuparse de momento.
 
Exemplos de carácteres literais son "a", "b", "1", etc., así coma algúns carácteres especiais coma "<codett>0</codett>", o caracter nulo, e "<codett>\n</codett>, o salto de liña.
 
Cando inicializamos unha variable de caracter, podemos facelo de dúas maneiras. A primeira é a favorita, e a segunta considérase un mal xeito de programar.
Liña 96:
'''<font style="color:#1b991b">char</font>''' letra1 = <font style="color:#ff48ff">'a'</font>;
 
Isto é "boa" programación xa que permite que calquera que lea o código vexa que <codett>letra1</codett> inicialízace coa letra <codett>'a'</codett>.
 
A segunda forma, que non debería de usarse, é
Liña 102:
'''<font style="color:#1b991b">char</font>''' letra2 = <font style="color:#ff48ff">97</font>; <font style="color:blue">// En ASCII, "a" equivale a 97</font>
 
Algúns considérano unha moi mala práctica de programación, se estamos a usalo para almacenar un caractercarácter, non un número pequeno, xa que se alguén le o código, verase na obriga de buscar o caractercarácter que equivale ao número 97. A fin de contas, <codett>letra1</codett> e <codett>letra2</codett> veñen ser o mesmo, pero é moito máis recomendable usar a primeira forma.
 
Hai que destacar que os carácterescaracteres de números represéntanse de xeito diferente aos propios números. Non é o mesmo <codett>'1'</codett> (caractercarácter) que <codett>1</codett>.
 
Hai outro tipo de literal que ten que ser explicado en relación aos carácterescaracteres: o '''literal de cadea'''. Unha cadea son unha serie de carácterescaracteres, xeralmente con intención de ser amosados. Están delimitados por comiñas dobres ('''"'''). Exemplo de literal de cadea é o <font style="color:#ff48ff">"Ola mundo!</font><font style="color:#a7a0d7">\n</font><font style="color:#ff48ff">"</font> do [[Programación en C/Ola mundo|clásico exemplo de C]].
 
=== The <codett>float</codett> type ===
<tt>float</tt> é a abreviatura en inglés de ''punto flotante'' ([http://es.wikipedia.org/wiki/Coma_flotante explicación en castelán]). Este tipo de variables almacenan números reais tamén, mais é só de unha palabra máquina de tamaño. Polo tanto, utilízase cando se precisa menos precisión da que proporciona unha variable de tipo <tt>double</tt>. Os literais <tt>float</tt> deben levar o sufixo F ou f, do contrario interpretaranse coma <tt>doubles</tt>. Son exemplos: <tt>3,1415926f</tt>, <tt>4,0f</tt>, <tt>6,022e+23f</tt>. As variables de tipo <tt>float</tt> poden declararse usando a palabra clave <tt>float</tt>.
<code>float</code> is short for Floating Point. It stores real numbers also, but is only one machine word in size. Therefore, it is used when less precision than a double provides is required. <code>float</code> literals must be suffixed with F or f, otherwise they will be interpreted as doubles. Examples are: 3.1415926f, 4.0f, 6.022e+23f. float variables can be declared using the <tt>float</tt> keyword.
 
===The <tt>double</tt> type===
TheAs variables de tipo <tt>double</tt> ande <tt>float</tt> types aresoi verymoi similarparecidas. TheAs de tipo <tt>float</tt> type allowspermítenche youalmacenar tonúmeros storede single-precisionpunto floatingflotante pointde numbers, while the <tt>double</tt> keyword allows you to store double''single-precision'' floating([http://en.wikipedia.org/wiki/Single_precision pointexplicación numbersen -inglés]), realnoutras numbersverbas, innúmeros other wordsreais, bothcon integervalores andenteiros non-integerou valuesnon. ItsO sizeseu istamaño typicallyé twohabitualmente machinede wordsdúas palabras máquina, orou 8 bytes onna mostmaioría machinesdas computadoras. ExamplesSon exemplos de literais de oftipo <tt>double</tt> literals are <tt>3.,1415926535897932</tt>, <tt>4.,0</tt>, <tt>6.,022e+23</tt> ([[whttp:Scientific_notation|scientific//es.wikipedia.org/wiki/Notaci%C3%B3n_cient%C3%ADfica notation]artigo sobre notación científica en castelán]). IfSe you useusases <tt>4</tt> insteaden oflugar de <tt>4.,0</tt>, theo 4 willinterpretaríase becoma interpretedun as anenteiro (<tt>int</tt>).
 
A distinción entre <tt>floats</tt> e <tt>doubles</tt> fíxose no seu momento para diferenciar os tamaños dos dous tipos. A primeira vez que se utilizou C, o espazo estaba en mínimos polo que o uso dun <tt>float</tt> en lugar dun <tt>double</tt> xustificábase por aforrar algo de memoria. A día de hoxe, con moita máis memoria dispoñible, non é realmente necesario conservar memoria deste xeito. Sería mellor usar sempre <tt>doubles</tt>. Ademais, algunhas implementacións de C utilizan <tt>doubles</tt> en lugar de <tt>floats</tt> cando declaras unha variable de tipo <tt>float</tt>.
The distinction between floats and doubles was made because of the differing sizes of the two types. When C was first used, space was at a minimum and so the judicious use of a float instead of a double saved some memory. Nowadays, with memory more freely available, you do not really need to conserve memory like this - it may be better to use doubles consistently. Indeed, some C implementations use doubles instead of floats when you declare a float variable.
 
IfPara youusar wantunha tovariable usede atipo <tt>double variable</tt>, useutiliza thea palabra clave <tt>double</tt> keyword.
 
== <tt>sizeof</tt> ==
Se te xurde calquera dúbida respecto do uso de memoria que fai en realidade calquera tipo (e isto vai tamén por tipos que se explicarán máis adiante), podes utilizar o operador <tt>'''sizeof'''</tt> para descubrilo con exactitude. A súa sintaxe é:
If you have any doubts as to the amount of memory actually used by any type (and this goes for types we'll discuss later, also), you can use the <tt>'''sizeof'''</tt> operator to find out for sure. (For completeness, it is important to mention that <tt>sizeof</tt> is a compile-time [[w:Unary operation|unary operator]], not a function.) Its syntax is:
 
'''<font style="color:#bb2323">sizeof</font>''' object
<source lang=c>
'''<font style="color:#bb2323">sizeof</font>'''(type)
sizeof object
sizeof(type)
</source>
 
TheAs twodúas expressionsexpresións aboveanteriores returndevolven theo sizetamaño ofdo theobxecto objecte andtipo type specifiedespecificado, inen bytes. TheO returntipo typedo isdato devolto é <tt>size_t</tt> (defineddefinido inna the headercabeceira <tt>&lt;stddef.h&gt;</tt>) whichque isé anun unsignedvalor valuesen asignar. Here'sA continuación un exemplo ando exampleseu usageuso:
 
'''<font style="color:#1b991b">size_t</font>''' size;
<source lang=c>
'''<font style="color:#1b991b">int</font>''' i;
size_t size;
size = '''<font style="color:#bb2323">sizeof</font>'''(i);
int i;
size = sizeof(i);
</source>
 
<tt>size</tt> willpasará bea setter too 4, assumingvalor <tt>CHAR_BIT4</tt>, isxa definedque aso byte son 8 bits, ande anun integerenteiro isson 32 bits wide. TheO valuevalor ofdo resultado de <tt>sizeof</tt>'s result isé theo numbernúmero ofde bytes.
 
NoteNótese thatque whencando se aplica o <tt>sizeof</tt> isa appliedunha tovariable ade tipo <tt>char</tt>, theo resultresultado issempre é <tt>1;</tt>. thatIsto isé:
 
'''<font style="color:#bb2323">sizeof</font>'''('''<font style="color:#1b991b">char</font>''');
<source lang=c>
sizeof(char)
</source>
 
Sempre devolverá <tt>1</tt>.
always returns 1.
 
==Modificadores do tipo de datos==
== Data type modifiers ==
Pódese alterar o tipo almacenamento de datos ao precedelos de certos modificadores.
 
<tt>'''long'''</tt> e <tt>'''short'''</tt> son modificadores que fan posible que un tipo de datos use máis ou menos memoria. A palabra clave <tt>int</tt> non necesita ir tras as palabras clave <tt>'''long'''</tt> e <tt>'''short'''</tt>. Un <tt>short</tt> pode usarse onde os valores se atopan ao redor dun rango menor ca o dun <tt>int</tt>, normalmente de <tt>-32768</tt> a <tt>32767</tt>. Un <tt>long</tt> pode usarse para conter un rango estendido de valores. Non está garantido que un <tt>short</tt> use menos memoria ca un <tt>int</tt>, nin o está que un <tt>long</tt> use máis. O único garantido é que <tt>sizeof(short) <= sizeof(int) <= sizeof(long)</tt>. Normalmente un <tt>short</tt> ten 2 bytes, un <tt>int</tt> 4 bytes, e un <tt>long</tt> entre 4 e 8 bytes.
One can alter the data storage of any data type by preceding it with certain modifiers.
 
En todos os tipos descritos anteriormente, unha parte úsase para indicar o signo (positivo ou negativo) dun valor. Se decides que a variable nunca vai ter un valor negativo, poderías usar o modificador <tt>'''unsigned'''</tt> para usar esa parte para almacenar outros datos, dobrando así o rango de valores ao asegurar que estes serán positivos. O modificador <tt>unsigned</tt> tamén pode usarse sen necesidade de incluír o <tt>int</tt>, en cuxo caso o tamaño defínese coma o dun <tt>int</tt>. Tamén hai un modificador <tt>'''signed'''</tt> que fai o contrario, pero non é necesario, agás para certos usos de <tt>char</tt>, pois todos os tipos (agás o <tt>char</tt>) están predefinidos coma <tt>signed</tt>.
<tt>'''long'''</tt> and <tt>'''short'''</tt> are modifiers that make it possible for a data type to use either more or less memory. The <tt>int</tt> keyword need not follow the <tt>short</tt> and <tt>long</tt> keywords. This is most commonly the case. A <tt>short</tt> can be used where the values fall within a lesser range than that of an <tt>int</tt>, typically -32768 to 32767. A <tt>long</tt> can be used to contain an extended range of values. It is not guaranteed that a <tt>short</tt> uses less memory than an <tt>int</tt>, nor is it guaranteed that a <tt>long</tt> takes up more memory than an <tt>int</tt>. It is only guaranteed that sizeof(short) <= sizeof(int) <= sizeof(long). Typically a <tt>short</tt> is 2 bytes, an <tt>int</tt> is 4 bytes, and a <tt>long</tt> either 4 or 8 bytes.
 
Para usar un modificador, simplemente declara a variable co tipo de datos e os modificadores relevantes:
In all of the types described above, one bit is used to indicate the sign (positive or negative) of a value. If you decide that a variable will never hold a negative value, you may use the <tt>'''unsigned'''</tt> modifier to use that one bit for storing other data, effectively doubling the range of values while mandating that those values be positive. The <tt>unsigned</tt> specifier also may be used without a trailing <tt>int</tt>, in which case the size defaults to that of an <tt>int</tt>. There is also a <tt>'''signed'''</tt> modifier which is the opposite, but it is not necessary, except for certain uses of <tt>char</tt>, and seldom used since all types (except <tt>char</tt>) are signed by default.
 
'''<font style="color:#1b991b">unsigned short int</font>''' e; <font style="color:blue">// Completamente calificado: unsigned short int</font>
To use a modifier, just declare a variable with the data type and relevant modifiers:
'''<font style="color:#1b991b">short</font>''' logo; <font style="color:blue">// short int</font>
<source lang=c>
'''<font style="color:#1b991b">unsigned shortlong</font>''' int usipois; /* fully qualified - <font style="color:blue">// unsigned shortlong int *</font>
 
short si; /* short int */
==Calificador <tt>const</tt> qualifier ==
unsigned long uli; /* unsigned long int */
</source>
== <tt>const</tt> qualifier ==
 
When the <tt>'''const'''</tt> qualifier is used, the declared variable must be initialized at declaration. It is then not allowed to be changed.