Mostrando las entradas con la etiqueta lenguajes de programacion. Mostrar todas las entradas
Mostrando las entradas con la etiqueta lenguajes de programacion. Mostrar todas las entradas

Operadores de programacion

 OPERADORES
® Operadores Aritméticos
® Operadores de Asignación
® Operadores de Bits
® Operadores de Comparación
® Operadores de Control de Errores
® Operador de Ejecución
® Operadores de Incremento/decremento
® Operadores Lógicos
® Operador de cadenas de texto
® Operadores de Matrices
® Operadores de Tipo
® Precedencia y asociatividad de operandos

5.1. Operadores Aritméticos
Disponemos de los clásicos operadores aritméticos:

Operación Nombre Resultado
$a + $b Suma Suma de $a y $b.
$a - $b Resta Diferencia entre $a y $b.
$a * $b Multiplicación Producto de $a y $b.
$a / $b División Cociente de $a y $b.
$a % $b Módulo Resto de la operación $a / $b.
-$a Negación El opuesto de $a
5.2. Operadores de Asignación
El operador básico de asignación es "=". A primera vista podrías pensar que es el
operador de comparación "igual que". Pero no. Realmente significa que el operando de
la izquierda toma el valor de la expresión a la derecha, (esto es, "toma el valor de").

El valor de una expresión de asignación es el propio valor asignado. Esto es, el
valor de "$a = 3" es 3. Esto permite hacer cosas curiosas como

$a = ($b = 4) + 5; // ahora $a es igual a 9, y $b vale 4.
Además del operador básico de asignación, existen los "operadores combinados"
para todas las operaciones aritméticas y de cadenas que sean binarias. Este operador
combinado permite, de una sola vez, usar una variable en una expresión y luego
establecer el valor de esa variable al resultado de la expresión. Por ejemplo:

$a = 3;
$a += 5; // establece $a a 8, como si hubiésemos escrito: $a = $a + 5;
$b = "Hola ";
$b .= "Ahí!"; // establece $b a "Hola Ahí!", igual que si hiciésemos $b = $b . "Ahí!";

Al igual que en C, C++ y Java, en PHP se dispone de estos operadores
combinados para, en una sola operación, operar sobre una variable y asignarle a esa
misma variable el resultado. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

60
Las operaciones susceptibles de ser usadas con estos operadores son:
+  -  *  /  %  &  ^  .  >>  y  <<
resultando en los nuevos signos de operación-asignación:
+=  -=  *=  /=  %=  &=  ^=  .=  >>=  y  <<=
Ejemplos de uso:
$var1 += 3;        // $var1 = $var1 + 3;
$var2 /= 2;        // $var2 = $var2 / 2;
$var3 >>= 1;        // $var3 = $var3 >> 1;
Fíjese en que la asignación realiza una nueva copia de la variable original
(asignación por valor), por lo que cambios a la variable original no afectan a la copia.
Esto puede tener interés si necesitas copiar algo como un array con muchos elementos
dentro de un bucle que se repita muchas veces (cada vez se realizará una nueva copia
del array). PHP soporta asignación por referencia, usando la sintaxis $var =
&$othervar; , pero esto no es posible en PHP3. 'Asignación por referencia' quiere decir
que ambas variables acabarán apuntando al mismo dato y que nada es realmente
copiado. A partir de PHP5 los objetos son asignados por referencia a menos que
explícitamente se diga lo contrario con la nueva palabra clave clone.
5.3. Operadores de bits
Veamos ahora los operadores BIT a BIT de que dispone PHP:

Operación Nombre Resultado
$a & $b Y Se ponen a 1 los bits que están a 1 en $a y $b.
$a | $b O Se ponen a 1 los bits que están a 1 en $a o $b.
$a ^ $b
O Exclusivo
(XOR)
Se ponen a 1 los bits que están a 1 en $a o $b, pero no
en ambos.
~ $a No Se invierten los bits (se cambian 1 por 0 y viceversa.)
$a << $b Desp. Izq.
Desplaza $b posiciones a la izquierda todos los bits de
$a (cada posición supone multiplicar por dos).
$a >> $b Desp. Drch.
Desplaza $b posiciones a la derecha todos los bits de $a
(cada posición supone dividir por dos).
5.4. Operadores de Comparación
Los operadores de comparación, como su nombre indica, permiten comparar dos
valores.

Operación Nombre Resultado
$a == $b Igualdad
Compara si el valor de los dos operandos es el
mismo.
$a === $b Identidad
Compara si el valor es el mismo y, además, el
tipo coincide (A partir de PHP4).
$a != $b No igual Cierto si el valor de $a no es igual al de $b.
$a !== $b No idéntico
Cierto si $a no es igual a $b, o si no tienen
el mismo tipo.
$a < $b Menor que Cierto si $a es estrictamente menor que $b. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
61
Operación Nombre Resultado
$a > $b Mayor que Cierto si $a es estrictamente mayor que $b.
$a <= $b Menor o igual que  Cierto si $a es menor o igual que $b.
$a >= $b Mayor o igual que Cierto si $a es mayor o igual que $b.
$a <> $b No igual Cierto si el valor de $a no es igual al de $b

Si se compara un entero con una cadena, la cadena es convertida a un número. Si
se compara dos cadenas numéricas, son comparadas como enteros. Estas reglas también
se aplican a la sentencia switch.
Otro operador condicional es el operador "?:" (o ternario), que funciona como en
C y otros muchos lenguajes.
(expr1) ? (expr2) : (expr3);
La expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se
evalúa a falso.

$cad = $a > $b ? “a es mayor que b” : “a no es mayor que b”;
5.5. Operadores de Control de Errores
PHP ofrece soporte para un operador de control de errores: el signo de arroba
(@). Cuando es colocado al comienzo de una expresión en PHP, cualquier mensaje de
error que pudiera generarse a causa de esa expresión será ignorado.

Si la característica track_errors está habilitada, cualquier mensaje de error
generado por la expresión será almacenado en la variable $php_errormsg. La variable
será sobrescrita en cada instancia de error, así que realice sus chequeos de forma
temprana si quiere usarla.

<?php
/* Error intencionado de archivo */
$mi_archivo = @file ('archivo_que_no_existe')
or die ("La apertura de archivo ha fallado: el error fue
             '$php_errormsg'");

// esto funciona con cualquier expresión, no solo con funciones:
$valor = @$cache[$llave];
// no producirá una anotación si el índice $llave no existe.
?>

Puede usar el operado @ al inicio de variables, llamadas a funciones y sentencias
include(), constantes. No puede usarlo sobre definiciones de función o clase, ni sobre
estructuras condicionales como if y foreach.
5.6. Operador de ejecución
PHP soporta un operador de ejecución: la comilla invertida (`). ¡Fíjese que no
son comillas normales! PHP intentará ejecutar la instrucción contenida dentro de las PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

62
comillas invertidas como si fuera un comando del shell; y su salida devuelta como el
valor de esta expresión (i.e., no tiene por qué ser simplemente volcada como salida;
puede asignarse a una variable). El uso de este operados es idéntico a la función
shell_exec().

$output = `dir /a-d`;
echo "<pre>$output</pre>";
5.7. Operadores de Incremento/decremento
PHP soporta los operadores de pre y post decremento y incremento al estilo de
C. Estos operadores no afectan a valores booléanos y incrementar NULL resulta en 1.
Operación Nombre Resultado
++$a Pre-incremento
Incrementa $a en 1, y devuelve $a (ya
incrementado)
$a++ Post-incremento
Devuelve $a (sin incrementar), y después lo
incrementa en 1.
--$a Pre-decremento Decrementa $a en 1, y después lo devuelve.
$a-- Post-decremento Devuelve $a, y después lo incrementa en 1.

He aquí un listado de ejemplo:
<?php
echo "<h3>Postincremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a++ . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";

echo "<h3>Preincremento</h3>";
$a = 5;
echo "Debería ser 6: " . ++$a . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Postdecremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a-- . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
echo "<h3>Predecremento</h3>";
$a = 5;
echo "Debería ser 4: " . --$a . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
?>

5.8. Operadores lógicos
Los operadores lógicos realizan operaciones dependiendo del valor booleano de
los operandos.
Operación Nombre Resultado
$a and $b Y Cierto si $a y $b son ciertos.
$a or $b O Cierto si $a o $b es cierto.
$a xor $b O Exclusivo.
Cierto si $a o $b es cierto, pero no
ambos.
! $a No Cierto si $a es falso.
$a && $b Y Cierto si $a y $b son ciertos.
$a || $b O Cierto si $a o $b es cierto. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
63

La razón de que haya dos operadores distintos para las operaciones Y y O lógicas
es que tienen distinta precedencia.
5.9. Operador de cadenas de texto
Para operar con cadenas sólo disponemos de un operador: la concatenación de
cadenas representada por el punto ‘.’.

Por ejemplo:
$a = 1;
$b = 2;
$c = “El resultado de “ . $a . “ + “ . $b . “ es “ . ($a + $b);
Que dejaría en $c la cadena “El resultado de 1 + 2 es 3”. Antes de cada
concatenación se realizarán las conversiones de tipo que fueran necesarias (en el
ejemplo, los enteros se convierten a cadenas.)
5.10. Operadores de Matrices
Ejemplo Nombre Resultado
$a + $b Unión Unión de $a y $b.
$a == $b Igualdad Cierto si $a y $b tienen las mismas parejas llave/valor.
$a=== $b Identidad
Cierto si $a y $b tienen las mismas parejas llave/valor
en el mismo orden y de los mismos tipos.
$a != $b
Noigualdad
Cierto si $a no es igual a $b.
$a <> $b
Noigualdad
Cierto si $a no es igual a $b.
$a!== $b
Noidentidad
Cierto si $a no es idéntico a $b.

El operador + adiciona elementos de las claves restantes de la matriz del lado
derecho a aquella al lado izquierdo, al mismo tiempo que cualquier clave duplicada NO
es sobrescrita.
<?php
$a = array("a" => "manzana", "b" => "banano");
$b = array("a" => "pera", "b" => "fresa", "c" => "cereza");

$c = $a + $b; // Unión de $a y $b
echo "Unión de \$a y \$b: \n";
var_dump($c);
$c = $b + $a; // Unión de $b y $a
echo "Unión de \$b y \$a: \n";
var_dump($c);
?>

Cuando sea ejecutado, este script producirá la siguiente salida:

Unión de $a y $b:
array(3) {
  ["a"]=>
  string(7) "manzana"
  ["b"]=> PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

64
  string(6) "banano"
  ["c"]=>
  string(6) "cereza"
}
Unión de $b y $a:
array(3) {
  ["a"]=>
  string(4) "pera"
  ["b"]=>
  string(5) "fresa"
  ["c"]=>
  string(6) "cereza"
}

Los elementos de las matrices son considerados equivalentes en la comparación
si éstos tienen la misma clave y valor.

<?php
$a = array("manzana", "banano");
$b = array(1 => "banano", "0" => "manzana");

var_dump($a == $b); // bool(true) tiene las mismas clave-valor
var_dump($a === $b); // bool(false) pero en orden distinto
?>
5.11. Operadores de Tipo
instanceof es usado para determinar si una variable PHP es una instancia de
objeto de cierta clase:

<?php
class MiClase
{
}

class NoMiClase
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof NoMiClase);
?>

El resultado del ejemplo sería:
bool(true)
bool(false)
El operador instanceof fue introducido en PHP5. Anteriormente se usaba la
función is_a() pero desde la introdución del operados instanceof, la función anterior se
considera obsoleta.
5.12. Precedencia y asociatividad de operandos
La precedencia de los operandos resuelve el orden en el que se evalúa una
expresión múltiple que no ha sido delimitada con paréntesis. Por ejemplo, 1 + 5 * 3 en
PHP daría como resultado 1 + (5 * 3) = 16 y no (1 + 5) * 3 = 18 ya que el producto
tiene mayor precedencia que la suma. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO


La tabla muestra la asociatividad de los operandos en PHP, y está ordenada en
orden creciente de precedencia (los más prioritarios al final):
Asociatividad Operandos
izquierda ,
izquierda or
izquierda xor
izquierda and
Derecha = += -= *= /= .= %= &= |= ^= ~= <<= >>=
izquierda ? :
izquierda ||
izquierda &&
izquierda |
izquierda ^
izquierda &
no-asociativo == != === !==
no-asociativo < <= > >=
izquierda << >>
izquierda + - .
izquierda * / %
derecha !
no-asociativo
~ - (int) (float) (string) (array) (object)
(bool) @
no-asociativo ++ --
izquierda [
no-asociativo clone new

La asociatividad de izquierda quiere decir que la expresión es evaluada desde la
izquierda a la derecha, la asociatividad de derecha quiere decir lo contrario.
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2

$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>

Tipos de datos de php


                          Tipos de Datos                              
® Booleanos
® Enteros
® Números en punto flotante
® Cadenas
® Arrays
® Objetos
® Recursos
® NULL
® Forzado de tipos
PHP soporta ocho tipos primitivos:
• booleanos
• enteros
• números en punto flotante
• cadenas
• matrices
• objetos
• recursos (resource)
• NULL

El tipo de una variable normalmente no lo indica el programador; en su lugar, lo
decide PHP en tiempo de ejecución dependiendo del contexto en el que se utilice esa
variable.
Si desea conocer el tipo y valor de una expresión, se puede usar la función
var_dump(). Para obtener una representación legible para humanos del tipo de una
variable para propósitos de depuración, se puede usar la función gettype(). Para
comprobar si una variable es de un cierto tiepo, no se debe usar gettype(), si no las
funciones is_tipo.

<?php
$un_bool = TRUE;   // un valor booleano
$un_str  = "foo";  // una cadena
$un_str2 = 'foo';  // una cadena
$un_int  = 12;     // un entero

echo gettype($un_bool); // imprime: boolean
echo gettype($un_str);  // imprime: string
// Si este valor es un entero, incrementarlo en cuatro
if (is_int($un_int)) {
    $un_int += 4;
}
// Si $bool es una cadena, imprimirla
// (no imprime nada)
if (is_string($un_bool)) {
    echo "Cadena: $un_bool";
}
?>

Si se quisiese obligar a que una variable se convierta a un tipo concreto, se
podría forzar la variable o usar la función settype() para ello.  PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

50
Nótese que una variable se puede comportar de formas diferentes en ciertas
situaciones, dependiendo de qué tipo sea en ese momento.
4.1. Booleanos
Este es el tipo más simple. Un booleano expresa un valor de verdad. Puede ser
TRUE o FALSE. Para especificar un literal booleano, use alguna de las palabras clave
TRUE o FALSE. Ambas son insensibles a mayúsculas y minúsculas.

$foo = True; // asigna el valor TRUE a $foo
4.2. Enteros
Los enteros se pueden especificar usando una de las siguientes sintaxis:
$a = 1234; # número decimal
$a = -123; # un número negativo
$a = 0123; # número octal (equivalente al 83 decimal)
$a = 0x12; # número hexadecimal (equivalente al 18 decimal)
4.3. Números en punto flotante
Los números en punto flotante (double) se pueden especificar utilizando
cualquiera de las siguientes sintaxis:

$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
4.4. Cadenas
Las cadenas de caracteres se pueden especificar usando uno de dos tipos de
delimitadores.

Si la cadena está encerrada entre dobles comillas ("), las variables que estén
dentro de la cadena serán expandidas (sujetas a ciertas limitaciones de interpretación).
Como en C y en Perl, el carácter de barra invertida ("\") se puede usar para especificar
caracteres especiales:
secuencia significado
\n Nueva línea
\r Retorno de carro
\t Tabulación horizontal
\\ Barra invertida
\$ Signo del dólar
\" Comillas dobles
\[0-7]{1,3}
la secuencia de caracteres que coincida con la expresión regular es un carácter en
notación octal
\x[0-9A-Fa-f]{1,2}
la secuencia de caracteres que coincida con la expresión regular es un carácter en
notación hexadecimal
 PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
51
Se puede proteger cualquier otro carácter, pero se producirá una advertencia en
el nivel de depuración más alto.

La segunda forma de delimitar una cadena de caracteres usa el carácter de
comilla simple (‘). Cuando una cadena va encerrada entre comillas simples, los únicos
caracteres de escape que serán comprendidos son \\ y \'. Esto es por convenio, así que se
pueden tener comillas simples y barras invertidas en una cadena entre comillas simples.
Las variables no se expandirán dentro de una cadena entre comillas simples.

Las cadenas se pueden concatenar usando el operador . (punto). Nótese que el
operador + (suma) no sirve para esto.

Se puede acceder a los caracteres dentro de una cadena tratándola como un array
de caracteres indexado numéricamente, usando una sintaxis similar a la de C. Vea un
ejemplo más abajo.
<?php
/* Asignando una cadena. */
$str = "Esto es una cadena";

/* Añadiendo a la cadena. */
$str = $str . " con algo más de texto";
/* Otra forma de añadir, incluye un carácter de nueva línea protegido. */
$str .= " Y un carácter de nueva línea al final.\n";
/* Esta cadena terminará siendo '<p>Número: 9</p>' */
$num = 9;
$str = "<p>Número: $num</p>";
/* Esta será '<p>Número: $num</p>' */
$num = 9;
$str = '<p>Número: $num</p>';
/* Obtener el primer carácter de una cadena  */
$str = 'Esto es una prueba.';
$first = $str[0];
/* Obtener el último carácter de una cadena. */
$str = 'Esto es aún una prueba.';
$last = $str[strlen($str)-1];
?>

4.4.1. Conversión a cadenas
Un valor puede ser convertido a cadena usando el moldeamiento (string) o la
función strval().
Un valor booleano TRUE es convertido a la cadena "1", el valor FALSE se
representa como "" (la cadena vacía). De esta forma, se puede convertir de ida y vuelta
entre valores booleanos y de cadena.

Un número integer o de punto flotante (float) es convertido a una cadena que
representa el número textualmente (incluyendo la parte del exponente para los números
de punto flotante). Los números de punto flotante pueden ser convertidos usando la
notación exponencial (4.1E+6).
 PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

52
Las matrices son siempre convertidas a la cadena "Array"; por esta razón,
echo() y print() no pueden por su cuenta mostrar los contenidos de un valor array. Para
ver un elemento sencillo, use una construcción como echo $arr['foo'].

Los objetos a partir de PHP 4 son convertidos siempre a la cadena "Object". Por
eso, al igual que pasa con las matrices echo() y print() no pueden por su cuenta mostrar
los contenidos de un valor objecto.

Los recursos son siempre convertidos a cadenas con la estructura "Resource id
#1" en donde 1 es el número único del valor recurso asignado por PHP en tiempo de
ejecución. No se debe escribir código que dependa de esta estructura; está sujeta a
cambios.

NULL se convierte siempre a una cadena vacía.

Como se ha indicado anteriormente, convertir directamente un valor tipo array,
object, o resource a un string no ofrece información útil sobre los valores más allá de su
tipo. Si desea inspeccionar el contenido de estos tipos debe usar las funciones print_r()
y var_dump().
 
La mayoría de valores PHP pueden ser convertidos también a string para su
almacenamiento permanentemente. Este método es conocido como serialización
(seriación), y es efectuado por la función serialize().

4.4.2. Conversión de cadenas a números
Cuando una cadena se evalúa como un valor numérico, el valor resultante y el
tipo se determinan como sigue.
La cadena se evaluará como un doble si contiene cualquiera de los caracteres '.',
'e', o 'E'. En caso contrario, se evaluará como un entero.
El valor viene dado por la porción inicial de la cadena. Si la cadena comienza
con datos de valor numérico, este será el valor usado. En caso contrario, el valor será 0
(cero). Los datos numéricos válidos son un signo opcional, seguido por uno o más
dígitos (que opcionalmente contengan un punto decimal), seguidos por un exponente
opcional. El exponente es una 'e' o una 'E' seguidos por uno o más dígitos.

Cuando la primera expresión es una cadena, el tipo de la variable dependerá de
la segunda expresión.

$foo = 1 + "10.5";                // $foo es doble (11.5)
$foo = 1 + "-1.3e3";              // $foo es doble (-1299)
$foo = 1 + "bob-1.3e3";           // $foo es entero (1)
$foo = 1 + "bob3";                // $foo es entero (1)
$foo = 1 + "10 Cerditos";         // $foo es entero (11)
$foo = 1 + "10.0 Cerditos";       // $foo es double (11)
$foo = "10.0 cerdos " + 1;        // $foo es double (11)
$foo = "10.0 cerdos " + 1.0;      // $foo es double (11)
Si quisiera probar cualquiera de los ejemplos de esta sección, puede cortar y
pegar los ejemplos e insertar la siguiente línea para ver por sí mismo lo que va
ocurriendo:  PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
53

echo "\$foo==$foo; el tipo es " . gettype( $foo ) . "<br>\n";
4.5. Arrays
Los arrays actualmente actúan tanto como tablas hash (arrays asociativos) como
arrays indexados (vectores).
4.5.1. Arrays unidimensionales
PHP soporta tanto arrays escalares como asociativos. De hecho, no hay
diferencias entre los dos. Se puede crear una array usando las funciones list() o array(),
o se puede asignar el valor de cada elemento del array de manera explícita.

$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13;
$matriz = array("foo" => "bar", 12 => true);

También se puede crear un array simplemente añadiendo valores al array.
Cuando se asigna un valor a una variable array usando corchetes vacíos, el valor se
añadirá al final del array.
$a[] = "hola"; // $a[2] == "hola"
$a[] = "mundo"; // $a[3] == "mundo"
Los arrays se pueden ordenar usando las funciones asort(), arsort(), ksort(),
rsort(), sort(), uasort(), usort(), y uksort() dependiendo del tipo de ordenación que se
desee.

Se puede contar el número de elementos de un array usando la función count().
Se puede recorrer un array usando las funciones next() y prev(). Otra forma
habitual de recorrer un array es usando la función each().
4.5.2. Arrays Multidimensionales

Los arrays multidimensionales son bastante simples actualmente. Para cada
dimensión del array, se puede añadir otro valor [clave] al final:
$a[1]      = $f;           # ejemplos de una sola dimensión
$a["foo"]  = $f;  

$a[1][0]     = $f;         # bidimensional
$a["foo"][2] = $f;         # (se pueden mezclar índices numéricos y asociativos)
$a[3]["bar"] = $f;         # (se pueden mezclar índices numéricos y asociativos)
$a["foo"][4]["bar"][0] = $f;   # tetradimensional!

En PHP3 no es posible referirse a arrays multidimensionales directamente dentro
de cadenas. Por ejemplo, lo siguiente no tendrá el resultado deseado:

$a[3]['bar'] = 'Bob';
echo "Esto no va a funcionar: $a[3][bar]"; PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

54
En PHP3, lo anterior tendrá la salida Esto no va a funcionar: Array[bar]. De
todas formas, el operador de concatenación de cadenas se puede usar para solucionar
esto:
$a[3]['bar'] = 'Bob';
echo "Esto va a funcionar: " . $a[3][‘bar’];
A partir de PHP4, sin embargo, todo el problema se puede solucionar encerrando
la referencia al array (dentro de la cadena) entre llaves:

$a[3]['bar'] = 'Bob';
echo "Esto va a funcionar: {$a[3][‘bar’]}";
Se pueden "rellenar" arrays multidimensionales de muchas formas, pero la más
difícil de comprender es cómo usar el comando array() para arrays asociativos. Estos
dos trozos de código rellenarán el array unidimensional de la misma manera:
# Ejemplo 1:

$a["color"] = "rojo";
$a["sabor"] = "dulce";
$a["forma"] = "redondeada";
$a["nombre"] = "manzana";
$a[3]  = 4;
# Ejemplo 2:
$a = array(
     "color" => "rojo",
     "sabor" => "dulce",
     "forma" => "redondeada",
     "nombre"  => "manzana",
     3       => 4
);

La función array() se puede anidar para arrays multidimensionales:
<?php
$a = array(
     "manzana"  => array(
          "color"  => "rojo",
          "sabor"  => "dulce",
          "forma"  => "redondeada"
     ),
     "naranja"  => array(
          "color"  => "naranja",
          "sabor"  => "ácido",
          "forma"  => "redondeada"
     ),
     "plátano"  => array(
          "color"  => "amarillo",
          "sabor"  => "paste-y",
          "forma"  => "aplatanada"
     )
);

echo $a["manzana"]["sabor"];    # devolverá "dulce"
?>

Siempre deben usarse comillas alrededor de un índice de matriz tipo cadena
literal. Por ejemplo, $foo['bar'] es correcto, mientras que $foo[bar] no lo es. Funciona
pero no es correcto. Funciona porque PHP automáticamente convierte una cadena pura
(una cadena sin comillas que no corresponda con símbolo conocido alguno) en una
cadena que contiene la cadena pura. Por ejemplo, si no se ha definido una constante
llamada bar, entonces PHP reemplazará su valor por la cadena 'bar' y usará ésta última. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
55
4.6. Objetos
Para inicializar un objeto, se usa la sentencia new para instanciar el objeto a una
variable.

class foo {
    function do_foo () {
        echo "Haciendo foo.";
    }
}

$bar = new foo;
$bar->do_foo();
4.7. Recursos
Un valor tipo resource es una variable especial, que contiene una referencia a un
recurso externo. Los recursos son creados y usados por funciones especiales. Gracias al
sistema de conteo de referencias introducido con el Motor Zend de PHP 4, un recurso
que ya no es referenciado es detectado automáticamente, y es liberado por el recolector
de basura. Por esta razón, rara vez se necesita liberar la memoria manualmente. Los
enlaces persistentes con bases de datos son una excepción a esta regla. Estos no son
destruidos por el recolector de basura.

4.8. NULL
El valor especial NULL representa una variable que no tiene valor. NULL es el
único valor posible del tipo NULL. Una variable es considerada como null si:

Ö se le ha asignado la constante NULL.
Ö no ha sido definida con valor alguno.
Ö ha sido eliminada con unset().

Existe un solo valor de tipo null, y ese es la palabra clave NULL, insensible a
mayúsculas y minúsculas.

$var = NULL;

Hay varias funciones interesantes para trabajar con el valor null: is_null() y unset().
4.9. Forzado de tipos
PHP no requiere (o soporta) la declaración explícita del tipo en la declaración de
variables; el tipo de una variable se determina por el contexto en el que se usa esa
variable. Esto quiere decir que si se asigna un valor de cadena a la variable var, var se
convierte en una cadena. Si después se asigna un valor entero a la variable var, se
convierte en una variable entera.
 PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

56
Un ejemplo de conversión de tipo automática en PHP es el operador suma '+'. Si
cualquiera de los operandos es un flotante, entonces todos los operandos se evalúan
como flotantes, y el resultado será un flotante. En caso contrario, los operandos se
interpretarán como enteros, y el resultado será también un entero. Nótese que esto NO
cambia los tipos de los operandos propiamente dichos; el único cambio está en cómo se
evalúan los operandos.

$foo = "0";  // $foo es una cadena (ASCII 48)
$foo++;      // $foo es la cadena "1" (ASCII 49) convertido a entero (1)
$foo += 1;   // $foo ahora es un entero (2)
$foo = $foo + 1.3;  // $foo ahora es un doble (3.3)
$foo = 5 + "10 Cerditos Pequeñitos"; // $foo es entero (15)
$foo = 5 + "10 Cerditos";     // $foo es entero (15)
Si se desea obligar a que una variable sea evaluada con un tipo concreto se
puede realizar un forzado de tipos. Si se desea cambiar el tipo de una variable se puede
usar la función settype().
Si quisiese probar cualquiera de los ejemplos de esta sección, puede cortar y
pegar los ejemplos e insertar la siguiente línea para ver por sí mismo lo que va
ocurriendo o usar la función var_dump():

echo "\$foo==$foo; el tipo es " . gettype( $foo ) . "<br>\n";

Nota: La posibilidad de una conversión automática a array no está definida
actualmente.

$a = 1;       // $a es un entero
$a[0] = "f";  // $a se convierte en un array, en el que $a[0] vale "f"
Aunque el ejemplo anterior puede parecer que claramente debería resultar en que
$a se convierta en un array, el primer elemento del cual es 'f', consideremos esto:

$a = "1";     // $a es una cadena
$a[0] = "f";  // ¿Qué pasa con los índices de las cadenas? ¿Qué ocurre?
Dado que PHP soporta indexación en las cadenas vía offsets usando la misma
sintaxis que la indexación de arrays, el ejemplo anterior nos conduce a un problema:
¿debería convertirse $a en un array cuyo primer elemento sea "f", o debería convertirse
"f" en el primer carácter de la cadena $a?
 
El forzado de tipos en PHP funciona como en C: el nombre del tipo deseado se
escribe entre paréntesis antes de la variable a la que se pretende forzar.

$foo = 10;   // $foo es un entero
$bar = (double) $foo;   // $bar es un doble

Los forzados de tipo permitidos son:
(int), (integer) - fuerza a entero (integer)
(bool),(bolean) – fuerza a booleano
(real), (double), (float) - fuerza a doble (double)
(string) - fuerza a cadena (string)
(array) - fuerza a array (array)
(object) - fuerza a objeto (object) PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
57

Nótese que las tabulaciones y espacios se permiten dentro de los paréntesis, así
que los siguientes ejemplos son funcionalmente equivalentes:

$foo = (int) $bar;
$foo = ( int ) $bar;
Puede no ser obvio que ocurrirá cuando se fuerce entre ciertos tipos. Por
ejemplo, lo siguiente debería ser tenido en cuenta.
Cuando se fuerza el cambio de un escalar o una variable de cadena a un array, la
variable se convertirá en el primer elemento del array:

$var = 'ciao';
$arr = (array) $var;
echo $arr[0];  // produce la salida 'ciao'

Cuando se fuerza el tipo de una variable escalar o de una cadena a un objeto, la
variable se convertirá en un atributo del objeto; el nombre del atributo será 'scalar':

$var = 'ciao';
$obj = (object) $var;
echo $obj->scalar;  // produce la salida 'ciao'
Cuando se fuerza el tipo de una variable a booleano, el valor de la variable será
FALSE si: es el valor booleano FALSE, si es el entero 0, si es el flotante 0.0 si es la
cadena vacía o la cadena “0”, si es un array con cero elementos, si es NULL; en
cualquier otro caso el valor será TRUE.

HTML y PHP ¿Cual es mejor?


Para interpretar un archivo, PHP simplemente interpreta el texto del archivo
hasta que encuentra uno de los carácteres especiales que delimitan el inicio de código
PHP. El intérprete ejecuta entonces todo el código que encuentra, hasta que encuentra
una etiqueta de fin de código, que le dice al intérprete que siga ignorando el código
siguiente. Este mecanismo permite embeber código PHP dentro de HTML: todo lo que
está fuera de las etiquetas PHP se deja tal como está, mientras que el resto se interpreta
como código.

Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques
de código PHP. De estas cuatro, sólo 2 (<?php ... ?> y <script language="php"> ...
</script>) están siempre disponibles; el resto pueden ser configuradas en el fichero de
php.ini para ser o no aceptadas por el intérprete. Mientras que el formato corto de
etiquetas (short-form tags) y el estilo ASP (ASP-style tags) pueden ser convenientes, no
son portables como la versión de formato largo de etiquetas. Además, si se pretende
embeber código PHP en XML o XHTML, será obligatorio el uso del formato <?php ...
?> para la compatibilidad con XML.

Las etiquetas soportadas por PHP son:
Formas de escapar de HTML
<?php
echo("si quieres servir documentos XHTML o XML, haz  como   aquí<BR>");
?>

<?
echo ("esta es la más simple, una instrucción de procesado   SGML <BR>");
?>
<?= expression ?> Esto es una abreviatura de "<? echo expression ?>"<BR>
<script language="php">
echo ("muchos editores (como FrontPage) no aceptan instrucciones de
procesado<BR>");
</script>
<%
echo ("Opcionalmente, puedes usar las etiquetas ASP<BR>");
%>
<%= $variable; # Esto es una abreviatura de "<% echo . . ." %>

El método primero, <?php ... ?>, es el más conveniente, ya que permite el uso
de PHP en código XML como XHTML.
El método segundo no siempre está disponible. El formato corto de etiquetas
está disponible con la función short_tags() (sólo PHP 3), activando el parámetro del
fichero de configuración de PHP short_open_tag, o compilando PHP con la opción --
enable-short-tags del comando configure. Está activa por defecto en php.ini-dist. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

34
 
El método cuarto sólo está disponible si se han activado las etiquetas ASP en el
fichero de configuración: asp_tags.
Nota: El soporte de etiquetas ASP se añadió en la versión 3.0.4.
Nota: No se debe usar el formato corto de etiquetas cuando se desarrollen
aplicaciones o librerías con intención de redistribuirlas, o cuando se
desarrolle para servidores que no están bajo nuestro control, porque puede
ser que el formato corto de etiquetas no esté soportado en el servidor. Para
generar código portable y redistribuíble, asegúrate de no usar el formato
corto de etiquetas.

La etiqueta de fin de bloque incluirá tras ella la siguiente línea si hay alguna
presente. Además, la etiqueta de fin de bloque lleva implícito el punto y coma; no
necesitas por lo tanto añadir el punto y coma final de la última línea del bloque PHP.
PHP permite estructurar bloques como:
<?php
if ($expression) {
?>
    <strong>This is true.</strong>
<?php
} else {
?>
    <strong>This is false.</strong>
<?php
}
?>

Este ejemplo realiza lo esperado, ya que cuando PHP encuentra las etiquetas ?>
de fin de bloque, empieza a escribir lo que encuentra tal cual hasta que encuentra otra
etiqueta de inicio de bloque. El ejemplo anterior es, por supuesto, inventado. Para
escribir bloques grandes de texto generamente es más eficiente separalos del código
PHP que enviar todo el texto mediante las funciones echo(), print() o similares.
2.2. Comentarios
Una vez visto como se introduce código PHP dentro del código HTML, lo
siguiente es ver como se puede comentar el código PHP. PHP soporta el estilo de
comentarios de 'C', 'C++' y de la interfaz de comandos de Unix. Por ejemplo:

<?php
    echo "Esto es una prueba"; // Comentario estilo c++
    /* Comentario multi-linea
       con varias lineas de comentario */
    echo "Otra prueba";
    echo "Prueba final"; # Comentario estilo shell de Unix
?>

Los estilos de comentarios de una línea (es decir, // y #) actualmente sólo
comentan hasta el final de la línea o el bloque actual de código PHP, lo primero que
ocurra.
<h1>Esto es un <?php # echo "simple";?> ejemplo.</h1>
<p>La cabecera de arriba dice 'Esto es un ejemplo.'. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO

Hay que tener cuidado con no anidar comentarios de estilo 'C', algo que puede
ocurrir al comentar bloques largos de código.

<?php
 /*
   echo "Esto es una prueba"; /* Este comentario causa problemas*/
 */
?>
Los estilos de comentarios de una linea actualmente sólo comentan hasta el final
de la linea o del bloque actual de código PHP, lo primero que ocurra. Esto implica que
el código HTML tras // ?> será impreso: ?> sale del modo PHP, retornando al modo
HTML, el comentario // no le influye.
2.3. Instrucciones
Un fragmento de código PHP va a estar compuesto por una o varias
instrucciones. En PHP la separación de instrucciones se hace de la misma manera que
en C o Perl - terminando cada instrucción con un punto y coma.

La etiqueta de fin de bloque (?>) implica el fin de la instrucción, por lo tanto no
es necesario un punto y coma después de la última instrucción. Como se ve en el
ejemplo donde los dos fragmentos siguientes son equivalentes:
<?php
    echo "Esto es una prueba";
?>

<?php echo "Esto es una preba" ?>
Todo script PHP se compone de una serie de sentencias o instrucciones. Una
sentencia puede ser una asignación, una llamada a función, un bucle, una sentencia
condicional e incluso una sentencia que no haga nada (una sentencia vacía). Las
sentencias normalmente acaban con punto y coma como se ha dicho anteriormente.
Además, las sentencias se pueden agrupar en grupos de sentencias encapsulando un
grupo de sentencias con llaves. Un grupo de sentencias es también una sentencia.

Para construir las sentencias o instrucciones se necesitan distintos elementos:
variables y constantes, operadores, estructuras de control, funciones, ...
A continuación se irán viendo cada uno de estos elementos que permiten construir los
scripts de PHP.

PHP frente a otros lenguajes

Para seleccionar un lenguaje de Script las cuatro grandes características que debe
cumplir son: Velocidad, estabilidad, seguridad y simplicidad.

• Velocidad: No sólo la velocidad de ejecución, la cual es importante, sino además no
crear demoras en la máquina. Por esta razón no debe requerir demasiados recursos
de sistema. PHP se integra muy bien junto a otro software, especialmente bajo
ambientes Unix, cuando se configura como módulo de Apache, esta listo para ser
utilizado.
• Estabilidad: La velocidad no sirve de mucho si el sistema se cae cada cierta
cantidad de ejecuciones. Ninguna aplicación es 100% libre de bugs, pero teniendo
de respaldo una increíble comunidad de programadores y usuarios es mucho mas
difícil para lo bugs sobrevivir. PHP utiliza su propio sistema de administración de
recursos y dispone de un sofisticado método de manejo de variables, conformando
un sistema robusto y estable.
• Seguridad: El sistema debe poseer protecciones contra ataques. PHP provee
diferentes niveles de seguridad, estos pueden ser configurados desde el archivo .ini
• Simplicidad: Se les debe permitir a los programadores generar código
productivamente en el menor tiempo posible. Usuarios con experiencia en C y C++
podrán utilizar PHP rápidamente.

Bueno otra característica a tener en cuenta seria la conectividad. PHP dispone de
una amplia gama de librerías, y agregarle extensiones es muy fácil. Esto le permite al
PHP ser utilizado en muchas áreas diferentes, tales como encriptado, gráficos, XML y
otras.
Ventajas adicionales de PHP
• PHP corre en (casi) cualquier plataforma utilizando el mismo código fuente,
pudiendo ser compilado y ejecutado en algo así como 25 plataformas, incluyendo
diferentes versiones de Unix, Windows (95,98,NT,ME,2000,XP,...) y Macs. Como
en todos los sistemas se utiliza el mismo código base, los scripts pueden ser
ejecutados de manera independiente al OS.
• La sintaxis de PHP es similar a la del C, por esto cualquiera con experiencia en
lenguajes del estilo C podrá entender rápidamente PHP. Entre los lenguajes del tipo
C incluimos al Java y Javascript, de hecho mucha de la funcionalidad del PHP se la
debe al C en funciones como fread() o srtlen(), así que muchos programadores se
sentirán como en casa.
• PHP es completamente expandible. Está compuesto de un sistema principal (escrito
por Zend), un conjunto de módulos y una variedad de extensiones de código.
• Muchas interfaces distintas para cada tipo de servidor. PHP actualmente se puede
ejecutar bajo Apache 1.3 y 2.X, IIS, Lighttpd, Netscape servers (Sun Java System,
Sun One, iPlanet, …),… . Otra alternativa es configurarlo como modulo CGI.
• Puede interactuar con muchos motores de bases de datos tales como MySQL, MS
SQL, Oracle, Informix, PostgreSQL, y otros muchos. Siempre podrás disponer de
ODBC para situaciones que lo requieran.
• Una gran variedad de módulos cuando un programador PHP necesite una interfase
para una librería en particular, fácilmente podrá crear una API para esta. Algunas de
las que ya vienen implementadas permiten manejo de gráficos, archivos PDF, Flash,
Cybercash, calendarios, XML, IMAP, POP, etc.
• Rapidez. PHP generalmente es utilizado como modulo de Apache, lo que lo hace
extremadamente veloz. Esta completamente escrito en C, así que se ejecuta
rápidamente utilizando poca memoria.
• PHP es Open Source, lo cual significa que el usuario no depende de una compañía
específica para arreglar cosas que no funcionan, además no estás forzado a pagar
actualizaciones anuales para tener una versión que funcione.

Algunas desventajas
• El manejo de errores no es tan sofisticado como otros lenguajes (ASP.Net, …) .
• No existe IDE o Debugger consolidado. Aunque en la actualidad existen proyectos
varios entre los mas destacados está Eclipse (gratuito) o Zend Studio (de pago).

Cuando debes utilizar PHP y cuando debes utilizar otro lenguaje
Si estás desarrollando bajo una plataforma UNIX o Linux, debes elegir entre
Perl y PHP, ambos excelentes. Para mucha gente PHP es más simple a la hora de
escribir scripts, haciéndolo más productivo en proyectos.
En ambientes Windows compite muy de cerca con ASP.Net , aquí la elección se
basa en asuntos un poco más técnicos y en la política que desee utilizarse para el sitio.
ASP.Net junto a IIS es probablemente más estable que PHP con IIS. Pero en términos
puramente técnicos, PHP bajo Windows Server es mucho más estable (además de ser
más rápido y utilizar menos recursos). De cualquier manera ASP.Net ofrece una mejor
integración con este ambiente sobre todo si se desea utilizar COM+.


Lenguaje C+ cap2

Tema 2 - Identificadores, tipos de datos, variables
y constantes.
2.1 - Identificadores.
Antes de proceder a explicar los identificadores en C, es necesario resaltar que
C es un lenguaje sensible al contexto, a diferencia por ejemplo de Pascal, por lo cual, C
diferencia entre mayúsculas  y minúsculas,  y por  tanto,  diferencia entre una palabra
escrita  total  o  parcialmente  en  mayúsculas  y  otra  escrita  completamente  en
minúsculas.
En  el  lenguaje  C,  un  identificador  es  cualquier  palabra  no  reservada  que
comience por una letra o por un subrayado,  pudiendo contener en su interior letras,
números  y  subrayados.  La  longitud  máxima  de  un  identificador  depende  del
compilador  que  se  este  usando,  pero,  generalmente,  suelen  ser  de  32  caracteres,
ignorándose todos aquellos caracteres que compongan el identificador y sobrepasen la
longitud  máxima.  Recuérdese,  además,  que  al  ser  C  sensible  al  contexto,  un
identificador escrito como esto_es_un_ident y otra vez como Esto_Es_Un_Ident será
interpretado como dos identificadores completamente distintos.
2.2 - Tipos de datos,  modificadores de tipo y modificadores
de acceso.
En C, toda variable, antes de poder ser usada, debe ser declarada, especificando
con ello el tipo de dato que almacenara. Toda variable en C se declara de la forma:
<tipo de dato> <nombre de variable> [, nombre de variable];
En C existen cinco tipos de datos según puede verse en la tabla siguiente:
Tipo de dato Descripción.
char Carácter o entero pequeño (byte)
int Entero
float Punto flotante
double Punto flotante (mayor rango que
float)
void Sin tipo (uso especial)
Tabla 2.2.1: Tipos de datos en C.
Algunos ejemplos de variables de C serían:
float a;
int b,c;
char caracter,otro_caracter;El lenguaje de programación C
Existen, además, cuatro modificadores de tipo, los cuales se aplican sobre los
tipos de datos anteriormente citados.  Los modificadores de tipo permiten cambiar el
tamaño, etc., de los tipos de datos anteriormente especificados.  Estos modificadores,
que sintácticamente anteceden a la declaración del tipo de dato, son:
Modificador Tipos de actuación Descripción
signed char int Con signo (por defecto)
unsigned char int Sin signo
long int double Largo
short int Corto
Tabla 2.2.2: Modificadores de los tipos de datos en C.
Es por ello, que podemos declarar variables como:
unsigned char a;
long double b;
short int i;
Es posible,  además,  aplicar  dos  modificadores  seguidos  a  un mismo tipo de
datos,  así,  es posible definir una variable de tipo  unsigned long int (entero largo sin
signo). El rango de valores de que permite cada variable depende del sistema operativo
sobre el cual se trabaje (MS-DOS, Windows95/98/NT/2000, UNIX/Linux), por lo cual
conviene referirse  al  manual  del  compilador  para  conocerlo.  De forma general,  los
sistemas operativos de 16 bits (MS-DOS, Windows 16 bits) poseen un rango y los de
32 bits (Windows 32 bits, UNIX/Linux) otro.
Rango de valores posibles en (notación matemática)
Tipo de variable declarada 16 bits 32 bits
char / signed char [-128 , 127] [-128 , 127]
unsigned char [0 , 255] [0 , 255]
int / signed int [-32768 , 32767] [-2147483647 , 2147483648]
unsigned int [0 , 65535] [0 , 4294967295]
short int / signed short
int
[-32768 , 32767] [-32768 , 32767]
unsigned short int [0 , 65535] [0 , 65535]
long  int  /  signed  long
int
[-2147483647 , 2147483648] [-2147483647 , 2147483648]
unsigned long int [0 , 4294967295] [0 , 4294967295]
float [-3.4E+38 , -3.4E-38], 0 ,
[3.4E-38 , 3.4E+38]
[-3.4E+38 , -3.4E-38], 0 ,
[3.4E-38 , 3.4E+38]
double [-1.7E+308 , -1.7E-308], 0 ,
[1.7E-308 , 1.7E+308]
[-1.7E+308 , -1.7E-308], 0 ,
[1.7E-308 , 1.7E+308]
long double [-3.4E+4932 , -1.1E-4932],  0 ,
[3.4E-4932 , 1.1E+4932]
[-3.4E-4932  ,  -1.1E+4932],  0  ,
[3.4E-4932 , 1.1E+4932]
Tabla 2.2.3: Rango de valores de las variables en C.
Además  de los  modificadores  de  tipo existen modificadores  de  acceso.  Los
modificadores  de  acceso  limitan  el  uso  que  puede  realizarse  de  las  variables
declaradas. Los modificadores de acceso anteceden a la declaración del tipo de dato de
la variable y son los siguientes:El lenguaje de programación C
Modificador Efecto
const Variable de valor constante
volatile Variable  cuyo  valor  es  modificado
externamente
Tabla 2.2.4: Modificadores de acceso en C.
La declaración de una variable como const permite asegurarse de que su valor
no será modificado por el programa, excepto en el momento de su declaración, en el
cual debe asignársele un valor inicial. Así, si declaramos la siguiente variable:
const int x=237;
Cualquier  intento  posterior  de  modificar  el  valor  de  x,  tal  como  x=x+5;,
producirá un error en tiempo de compilación.
La declaración de una variable como volatile, indica al  compilador que dicha
variable puede modificarse por  un proceso externo al  propio programa (tal  como la
hora del sistema), y por ello, que no trate de optimizar dicha variable suponiéndole un
valor constante, etc. Ello fuerza a que cada vez que se usa la variable, se realice una
comprobación de su valor.
Los modificadores const y volatile pueden usarse de forma conjunta en ciertos
casos, por lo cual no son excluyentes el uno del otro. Ello es posible si se declara una
variable que actualizara el reloj del sistema, (proceso externo al programa), y que no
queremos pueda modificarse en el interior del programa. Por ello, podremos declarar:
volatile const unsigned long int hora;
2.3 - Declaración de variables y alcance.
En C,  las  variables  pueden ser  declaradas  en cuatro lugares  del  módulo del
programa:
• Fuera de todas las funciones del programa, son las llamadas variables globales,
accesibles desde cualquier parte del programa.
• Dentro de una función, son las llamadas variables locales, accesibles tan solo
por la función en las que se declaran.
• Como parámetros a la función, accesibles de igual forma que si se declararan
dentro de la función.
• Dentro de un bloque de código del  programa,  accesible tan solo dentro del
bloque donde se declara.  Esta forma de declaración puede interpretarse como
una variable local del bloque donde se declara.
Para un mejor comprensión, veamos un pequeño programa de C con variables
declaradas de las cuatro formas posibles:El lenguaje de programación C
#include <stdio.h>
int sum; /* Variable global, accesible desde cualquier parte */
         /* del programa*/
void suma(int x) /* Variable local declarada como parámetro, */
                 /* accesible solo por la función suma*/
{
   sum=sum+x;
return;
}
void intercambio(int *a,int *b)
{
if (*a>*b)
{
      int inter; /* Variable local, accesible solo dentro del */
                 /* bloque donde se declara*/
      inter=*a;
*a=*b;
*b=inter;
}
return;
}
int main(void) /*Función principal del programa*/
{
   int contador,a=9,b=0; /*Variables locales, accesibles solo */
                         /* por main*/
   sum=0;
   intercambio(&a,&b);
   for(contador=a;contador<=b;contador++) suma(contador);
   printf(“%d\n”,suma);
   return(0);
}
2.4  -  Especificadores  de  almacenamiento  de  los  tipos  de
datos.
Una vez explicada la declaración de variables y su alcance, vamos a proceder a
explicar como es posible modificar el alcance del almacenamiento de los datos. Ello es
posible  realizarlo  mediante  los  especificadores  de  almacenamiento.  Existen  cuatro
especificadores de almacenamiento. Estos especificadores de almacenamiento, cuando
se  usan,  deben  preceder  a  la  declaración  del  tipo  de  dato  de  la  variable.  Estos
especificadores de almacenamiento son:
Especificador de
almacenamiento
Efecto
auto Variable  local  (por
defecto)
extern Variable externa
static Variable estática
register Variable registro
Tabla 2.4.1: Especificadores de almacenamiento en C.El lenguaje de programación C
El  especificador  auto se  usa  para  declarar  que  una  variable  local  existe
solamente mientras  estemos dentro de la subrutina  o bloque de programa donde se
declara, pero, dado que por defecto toda variable local es auto, no suele usarse.
El  especificador  extern se usa en el  desarrollo de programas compuestos por
varios módulos. El modificador  extern se usa sobre las variables globales del módulo,
de forma que si una variable global se declara como extern, el compilador no crea un
almacenamiento para ella en memoria,  sino que, tan solo tiene en cuenta que dicha
variable ya ha sido declarada en otro modulo del programa y es del tipo de dato que se
indica.
El especificador static actúa según el alcance de la variable:
• Para variables locales, el especificador static indica que dicha variable local
debe almacenarse de forma permanente en memoria, tal y como si fuera una
variable global, pero su alcance será el que correspondería a una variable local
declarada en la subrutina o bloque. El principal efecto que provoca la
declaración como static de una variable local es el hecho de que la variable
conserva su valor entre llamadas a la función.
• Para variables globales, el especificador static indica que dicha variable global
es local al módulo del programa donde se declara, y, por tanto, no será
conocida por ningún otro módulo del programa.
El especificador  register se aplica solo a variables locales de tipo  char e  int.
Dicho  especificador  indica  al  compilador  que,  caso  de  ser  posible,  mantenga  esa
variable en un registro de la CPU y no cree por ello una variable en la memoria. Se
pueden declarar como register cuantas variables se deseen, pues el compilador ignorara
dicha  declaración  caso  de  no  poder  ser  satisfecha.  El  uso  de  variables  con
especificador  de  almacenamiento  register permite  colocar  en registros  de  la  CPU
variables muy frecuentemente usadas, tales como contadores de bucles, etc.
Algunos ejemplos de uso de los especificadores de almacenamiento son:
register unsigned int a;
static float b;
extern int c;
static const unsigned long int d;
2.5 - Constantes.
En C, las constantes se refieren a los valores fijos que el programa no puede
alterar. Algunos ejemplos de constantes de C son:
Tipo de dato Constantes de ejemplo
char ‘a’ ‘9’ 'Q'
int 1 -34 21000
long int -34 67856L 456
short int 10 -12 1500El lenguaje de programación C
unsigned int 45600U 345 3
float 12.45 4.34e-3 -2.8e9
double -34.657 -2.2e-7 1.0e100
Tabla 2.5.1: Tipos de constantes en C.
Existen, además, algunos tipos de constantes, distintos a los anteriores, que es
necesario resaltar  de forma particular.  Estos  tipos  de constantes  son las  constantes
hexadecimales y octales, las constantes de cadena, y las constantes de barra invertida.
Las constantes hexadecimales y octales son constantes enteras,  pero definidas
en base 16 (constantes hexadecimales) o en base 8 (constantes octales). Las constantes
de tipo hexadecimal comienzan por los caracteres 0x seguidas del número deseado. Las
constantes  de  tipo  octal  comienzan  por  un cero  (0).  Por  ejemplo,  son  constantes
hexadecimales 0x34 (52 decimal),  0xFFFF (65535 decimal); y constantes octales 011
(9 decimal), 0173 (123 decimal)
Las constantes de cadena son conjuntos de caracteres que se encierran entre
comillas  dobles.  Por  ejemplo,  son constantes  de cadena  “Esto es una constante de
cadena”, “Estos son unos apuntes de C”, etc.
Las  constantes  de  caracteres  de  barra  invertida  se  usan  para  introducir
caracteres que es imposible introducir por el teclado (tales como retorno de carro, etc.).
Estas  constantes  son proporcionadas  por  C para  que sea  posible  introducir  dichas
caracteres  como  constantes  en  los  programas  en  los  cuales  sea  necesario.  Estas
constantes de caracteres de barra invertida son:
Código Significado
\b Retroceso
\f Alimentación de hoja
\n Nueva línea
\r Retorno de carro
\t Tabulador horizontal
\” Doble comilla
\’ Simple comilla
\0 Nulo
\\ Barra invertida
\v Tabulador vertical
\a Alerta
\o Constante octal
\x Constante
hexadecimal
Tabla 2.5.2: Constantes de barra invertida en C.
El  uso de las  constantes  de barra invertida es igual  que el  de cualquier  otro
carácter,  así, si  ch es una variable de tipo char, podemos hacer:  ch=‘\t’, o ch=‘\x20’
(carácter espacio), etc., de igual forma que realizaríamos con cualquier otra constante
de carácter. Además, las constantes de barra invertida pueden usarse en el interior de
constantes  de  cadena  como  un  carácter  más,  por  ello,  podemos  poner  escribir  la
constante de cadena: "Esto es una linea\n".

Lenguaje C+

Hola que tal mis lectores , le quiero presentar en los siguientes post los diferentes capitulos de c de un libro muy interesante espero que lo disfruten


                     Tema 1 - Introducción.
El  lenguaje  de  programación  C fue  creado  por  Brian  Kernighan  y  Dennis
Ritchie a mediados de los años 70. La primera implementación del mismo la realizó
Dennis Ritchie sobre un computador DEC PDP-11 con sistema operativo UNIX. C es
el  resultado  de un proceso de desarrollo que comenzó con un lenguaje anterior,  el
BCPL,  el  cual  influyó en el  desarrollo por  parte  de Ken Thompson de un lenguaje
llamado  B,  el  cual  es  el  antecedente  directo  del  lenguaje  C.  El  lenguaje  C es  un
lenguaje para programadores en el sentido de que proporciona una gran flexibilidad de
programación  y  una  muy  baja  comprobación  de  incorrecciones,  de  forma  que  el
lenguaje deja bajo la responsabilidad del  programador  acciones que otros  lenguajes
realizan por si mismos. Así, por ejemplo, C no comprueba que el índice de referencia
de un vector (llamado array en la literatura informática)  no sobrepase el tamaño del
mismo; que no se escriba en zonas de memoria que no pertenecen al área de datos del
programa, etc.
El lenguaje C es un lenguaje estructurado, en el mismo sentido que lo son otros
lenguajes de programación tales como el lenguaje Pascal, el Ada o el Modula-2, pero
no es estructurado por  bloques,  o sea,  no es  posible declarar  subrutinas  (pequeños
trozos de programa) dentro de otras subrutinas, a diferencia de como sucede con otros
lenguajes estructurados tales como el Pascal. Además, el lenguaje C no es rígido en la
comprobación de tipos de datos, permitiendo fácilmente la conversión entre diferentes
tipos de datos y la asignación entre tipos de datos diferentes, por ejemplo la expresión
siguiente es válida en C:
float a; /*Declaro una variable para numeros reales*/
int b; /*Declaro otra variable para numero enteros*/
b=a; /*Asigno a la variable para entera el numero real*/
Todo programa de C consta,  básicamente, de un conjunto de funciones, y una
función llamada  main,  la cual es la primera que se ejecuta al comenzar el programa,
llamándose desde ella al resto de funciones que compongan nuestro programa.
Desde su creación, surgieron distintas versiones de C, que incluían unas u otras
características, palabras reservadas, etc. Este hecho provoco la necesidad de unificar el
lenguaje C, y es por ello que surgió un standard de C, llamado ANSI-C, que declara
una serie de características,  etc., que debe cumplir todo lenguaje C. Por ello, y dado
que todo programa que se desarrolle siguiendo el standard ANSI de C será fácilmente
portable de un modelo de ordenador a otro modelo de ordenador, y de igual forma de
un modelo de compilador  a otro,  en estos  apuntes  explicaremos un C basado en el
standard ANSI-C.
El lenguaje C posee un número reducido de palabras reservadas (tan solo 32)
que define el  standard ANSI-C.  Estas  palabras  reservadas  pueden verse en la tabla
siguiente:
auto break case char const continue default
do double else enum extern float for
goto if int long register return shortEl lenguaje de programación C
signed sizeof static struct switch typedef union
unsigned void volatile while
Tabla 1.1: Palabras reservadas del lenguaje C.
THEMRFRIKI S.A. Con tecnología de Blogger.

About