Como ya hemos visto, cuando se pasa un argumento por valor, realmente se pasa una copia de
éste, y si esta copia se modifica el argumento general no se ve modificado. Sin embargo, em muchas ocasiones lo que queremos es que una función cambie los valores del los argumentos que le pasamos. Para lograrlo se utiliza lo que se conoce como paso de argumentos por referencia. En estos casos, no se pasa una copia del argumento, sino el argumento mismo.
Cuando realizamos un paso de argumentos por referencia en C, realmente lo que estamos pasando son direcciones de memoria. En otras palabras, lo que le pasamos a la función son las direcciones de memoria de los argumentos. Esta operación se logra mediante la utilización de punteros. De este modo,cuando llamamos a una función, lo que realmente le pasamos son punteros a los argumentos que deseamos modificar.
Autor:" Fundamentos de programación" de autor J.M.Molina y F.Chamorro, Ed.McGraw Hill.
viernes 27 de marzo de 2009
CURSO FUNCIONES EN C. PASO DE ARGUMENTOS Y PUNTEROS . 2' PARTE
Etiquetas:
curso lenguaje C,
lenguaje C,
programación en lenguaje C
jueves 19 de marzo de 2009
CURSO FUNCIONES EN C. PASO DE ARGUMENTOS Y PUNTEROS ( 1º PARTE)
En C todos los argumentos que se pasan a una función se pasan pon valor. En otras palabras, se pasa una copia del valor del argumento y no el argumento en sí (por ello, este procedimiento se conoce en algunas ocasiones como paso por copia). Al pasar una copia del argumento original a la función, cualquier modificación que se realice sobre esta copia no tendrá efecto sobre el argumento original utilizado en la llamada de la función. Se puede considerar un argumento pasado por valor como una variable local de la función a la que se ha pasado, de tal modo que los cambios que los cambios que se realicen sobre ésta tendrán efecto sólo dentro de la función.
Dado que lo que se pasa a la función modificar es una copia de la variable i, el valor de esta función en la función main no se ve alterado cuando dentro de la función modificar se cambia el valor de la variable
Dado que lo que se pasa a la función modificar es una copia de la variable i, el valor de esta función en la función main no se ve alterado cuando dentro de la función modificar se cambia el valor de la variable
Etiquetas:
curso lenguaje C,
curso programación en C,
lenguaje C
jueves 12 de marzo de 2009
CURSO FUNCIONES EN C. VARIABLES DE REGISTRO.
Cuando declaremos una función como variable de registro, le estamos diciendo al compilador que queremos que la variable se almacene en un lugar de rápido acceso, generalmente en los registros de la unidad central de procesamiento del ordenador.
Para declarar una variable como variable de registro, debemos colocar la palabra reservada register antes de la cdeclaración de la variable. Veamos algunos ejemplos:
register int contador:
register char a ;
Sólo se pueden declarar variables como register si son variables automáticas (locales) o argumentos formales de una función.
Cuando se utiliza una variable de tipo register, no está garantizado que sun valor se almacene en un registro. Para que el valor de dicha variable se almacene en un registro, debe haber alguno disponible, de lo contrario C ignora el calificador register y crea la variable localmente.
Debido a restricciones de hardware, existen ciertas limitaciones al utilizar variables register. Por esta razón, sólo un número determinado de variables puede declararse como register dentro de una función.
También existen limitaciones en cuanto al tipo de las variables. Es el compilador el que se encarga de ignorar el calificador register si existe un número excesivo de declaraciones o los tipos utilizados no están permitidos.
Autor: Fundamentos de programación. J.M.Molina y F.Chamorro. Ed. McGraw Hill
Para declarar una variable como variable de registro, debemos colocar la palabra reservada register antes de la cdeclaración de la variable. Veamos algunos ejemplos:
register int contador:
register char a ;
Sólo se pueden declarar variables como register si son variables automáticas (locales) o argumentos formales de una función.
Cuando se utiliza una variable de tipo register, no está garantizado que sun valor se almacene en un registro. Para que el valor de dicha variable se almacene en un registro, debe haber alguno disponible, de lo contrario C ignora el calificador register y crea la variable localmente.
Debido a restricciones de hardware, existen ciertas limitaciones al utilizar variables register. Por esta razón, sólo un número determinado de variables puede declararse como register dentro de una función.
También existen limitaciones en cuanto al tipo de las variables. Es el compilador el que se encarga de ignorar el calificador register si existe un número excesivo de declaraciones o los tipos utilizados no están permitidos.
Autor: Fundamentos de programación. J.M.Molina y F.Chamorro. Ed. McGraw Hill
Etiquetas:
curso lenguaje C,
curso programación en C,
lenguaje C
lunes 9 de marzo de 2009
CURSO FUNCIONES EN C. VARIABLES ESTÁTICAS ( 2º PARTE).
Como hemo visto, el valor de la variable contador se mantiene de una llamada a la otra de la función imprimeValor. Esto quiere decir que las variables locales estáticas proporcionan un medio privado de almanamiento permanente en una función.
Por otro lado la aplicación del calificador static a variables locales hace que a éstas solo se pueda acceder desde el fichero fuente donde se definieron y no desde ningún otro fichero fuente. Por ejemplo, si definimos las variaables globales tiempo y reloj en el siguiente fihero fuente:
static int tiempo;
static in reloj ;
main ();
{
...
}
void función1() ;
{
...
}
cualquier otra función que forme parte de a aplicación y que no forme parte de este fichero fuente no podrá tener acceso a tiempo ni a reloj. Es más, se puden utilizar lo mismos nombres para definir variables en funciones en otros ficheros sin ningún tipo de problema.
Al igual que las variables locales, las funciones son objetos externos cuyos nombres, generalmente, se desea que se conozcan de manera global. Sin embargo, en algunas situaciones resulta deseable limitar ese acceso al fichero en el que se declara la función. En estos casos, se utiliza la palabra reservada static y su mecanismo de aplicación es similar al caso de las variables, como podemos apreciar en el siguiente ejemplo.
statit in cuadrado ( int numero)
{
int calculo = 0 ;
calculo = número * numero
return calculo ;
}
Limitar el acceso tanto a variables locales como a funciones, mediante su declaración como estáticas, resulta útil en algunas situaciones en las que se quiere evitar que entren en conflicto con otras variables o funciones incluso inadvertidamente.
Fuente: Fundamentos de programación de J.M.Molina y F. Chamorro, ed.McGraw Hill
Por otro lado la aplicación del calificador static a variables locales hace que a éstas solo se pueda acceder desde el fichero fuente donde se definieron y no desde ningún otro fichero fuente. Por ejemplo, si definimos las variaables globales tiempo y reloj en el siguiente fihero fuente:
static int tiempo;
static in reloj ;
main ();
{
...
}
void función1() ;
{
...
}
cualquier otra función que forme parte de a aplicación y que no forme parte de este fichero fuente no podrá tener acceso a tiempo ni a reloj. Es más, se puden utilizar lo mismos nombres para definir variables en funciones en otros ficheros sin ningún tipo de problema.
Al igual que las variables locales, las funciones son objetos externos cuyos nombres, generalmente, se desea que se conozcan de manera global. Sin embargo, en algunas situaciones resulta deseable limitar ese acceso al fichero en el que se declara la función. En estos casos, se utiliza la palabra reservada static y su mecanismo de aplicación es similar al caso de las variables, como podemos apreciar en el siguiente ejemplo.
statit in cuadrado ( int numero)
{
int calculo = 0 ;
calculo = número * numero
return calculo ;
}
Limitar el acceso tanto a variables locales como a funciones, mediante su declaración como estáticas, resulta útil en algunas situaciones en las que se quiere evitar que entren en conflicto con otras variables o funciones incluso inadvertidamente.
Fuente: Fundamentos de programación de J.M.Molina y F. Chamorro, ed.McGraw Hill
Etiquetas:
curso lenguaje C,
curso programación en C,
programacion en C
viernes 6 de marzo de 2009
CURSO FUNCIONES EN C. VARIABLES ESTÁTICAS ( 1º PARTE)
Otro tipo de almacenamiento son las variables estáticas indentificadas por la palabra reservada static. Las variables estátitas pueden ser tanto locales como globales. Una variable estática local, al igual que una variable automática, está unicamente asociada a la función en la que se declara con la salvedad de su existencia es permanente.
En otras palabra, su contenido no se borra al finalizar la función, si no que mantiene su valor hasta el final del programa. Por ejemplo, en el siguiente programa declaramos la variante contador como estática dentro de la función imprit imprimevalor y desde la función main llamamos a esta función varias veces-
# include
voin imprimeValor () ;
main ()
{
imprimeValor () ;
imprimeValor () ;
imprimeValor () ;
imprimeValor () ;
return () ;
}
void imprimeValor ();
{
static in contador = 0 ;
printf ("El valor de contador es: %d\n, contador) ;
contador ++ ;
}
La primera vez que se llama a la función imprimeValor se inicializa su valor a 0, y trás imprimir su valor se incrementa éste. En las sucesivas llamadas, el valor de la variable contador se mantiene y el resultado es el siguiente:
El valor de contador es: 0
El valor de contador es: 1
El valor de contador es: 2
El valor de contador es: 3
Autor: Fundamentos de programación, de J.M.Molina, F.Chamorro. Ed.McGraw Hill.
En otras palabra, su contenido no se borra al finalizar la función, si no que mantiene su valor hasta el final del programa. Por ejemplo, en el siguiente programa declaramos la variante contador como estática dentro de la función imprit imprimevalor y desde la función main llamamos a esta función varias veces-
# include
voin imprimeValor () ;
main ()
{
imprimeValor () ;
imprimeValor () ;
imprimeValor () ;
imprimeValor () ;
return () ;
}
void imprimeValor ();
{
static in contador = 0 ;
printf ("El valor de contador es: %d\n, contador) ;
contador ++ ;
}
El valor de contador es: 0
El valor de contador es: 1
El valor de contador es: 2
El valor de contador es: 3
Autor: Fundamentos de programación, de J.M.Molina, F.Chamorro. Ed.McGraw Hill.
jueves 5 de marzo de 2009
CURSO FUNCIONES EN C. EJERCICIO PRÁCTICO 5
Utilización del modificador de tipo extern.
#include
void unaFuncion () ;
void otraFuncion () ;
main ()
{
extern variable ;
variable = 9
printf (" El valor de variable es: %d\n", variable ) ;
unaFuncion () ;
printf (" Ahora el valor de variable es: %d\n", variable) ;
return () ;
}
void unaFuncion () ;
{
extern variable;
printf ("En la funcion unaFuncion, variable es: %d\n", variable) ;
}
int variable ;
Su salida es
Su valor de variale es 9
En la funcion unaFuncion, variable es: 9
Ahora el valor de variable es 9
F uente: Fundamentos de Programación, de J.M.Molina y F.Chamorro, ed. McGraw Hill
#include
void unaFuncion () ;
void otraFuncion () ;
main ()
{
extern variable ;
variable = 9
printf (" El valor de variable es: %d\n", variable ) ;
unaFuncion () ;
printf (" Ahora el valor de variable es: %d\n", variable) ;
return () ;
}
void unaFuncion () ;
{
extern variable;
printf ("En la funcion unaFuncion, variable es: %d\n", variable) ;
}
int variable ;
Su salida es
Su valor de variale es 9
En la funcion unaFuncion, variable es: 9
Ahora el valor de variable es 9
F
miércoles 4 de marzo de 2009
CURSO FUNCIONES EN C. EJERCICIO PRÁCTICO 4
Utilización de variables locales como mecanismo de intercambio de información entre funciones.
#include
void unaFuncion () ;
void otraFuncion () ;
int variable;
main()
{
variable = 9
printf (" El valor de variable es: %d\n", variable) ;
unaFuncion()
otraFuncion ()
printf ("Ahora el valor de variable es: %d\n", variable) ;
return ()
}
void unaFuncion ()
{
printf (" En la función unaFuncion, variable es: %d\n", variable) ;
}
void otraFuncion ()
{
variable ++ ;
printf (" En la funcion otraFuncion, variable es:%d\n", variable) ;
}
La salida es:
El valor de variable es : 9
En la funcion unaFuncion, variable es : 9
En la funcion otraFuncion, variable es : 10
Ahora el valor de variable es : 10
F uente: Fundamentos de programación de J.M. Molina y F.Chamorro, ed.McGraw Hill.
#include
void unaFuncion () ;
void otraFuncion () ;
int variable;
main()
{
variable = 9
printf (" El valor de variable es: %d\n", variable) ;
unaFuncion()
otraFuncion ()
printf ("Ahora el valor de variable es: %d\n", variable) ;
return ()
}
void unaFuncion ()
{
printf (" En la función unaFuncion, variable es: %d\n", variable) ;
}
void otraFuncion ()
{
variable ++ ;
printf (" En la funcion otraFuncion, variable es:%d\n", variable) ;
}
La salida es:
El valor de variable es : 9
En la funcion unaFuncion, variable es : 9
En la funcion otraFuncion, variable es : 10
Ahora el valor de variable es : 10
F
martes 3 de marzo de 2009
CURSO FUNCIONES EN C. VARIABLES GLOBALES.
A diferencia de las variables locales cuyo ámbito estuvo confinado a la función donde estaban declaradas, el ámbito de las variables globales se extienden desde el punto en el que se definen hasta el final del programa. En otras palabras, si definimos una variable al principio del programa, cualquier función que forme parte de éste podrá utilizarla simplemente haciendo uso de su nombre.
La utilización de variables globales porporciona un mecanismo de intercambio de información entre funciones sin necesidad de utilizar argumentos. Por otra parte,las variables globales mantienen el valor que se les ha asignado dentro de su ámbito, incluso después de finalizar las funciones que modifican dicho valor. Debemos tener en cuenta que el uso de variables globales para el intercambio de informaciones entre funciones puede resultar útil en algunas situaciones ( como cuando se desea transferir más de un valor desde una función), pero su utilización podría llevarnos a programas de dificil interpretación y complejos de depurar.
Cuando trabajamos con variables globales debemos distinguir entre la definición de una variable global y su declaración. Cuando definamos una variable local, lo hacemos de la misma forma en que se declara una variable ordinaria. La definición de una variable global se realiza fuera de cualquier función. Además, las definiciones de variables globales suelen aparecer antes de cualquier función que desee utilizar dicha variable. La razón es que una variable global se identifica por la localización de su definición dentro del programa. Cuando se defina una variable global automáticamente, se reserva memoria para el almacenamiento de ésta.Además, podemos asignarle un valor inicial a la misma.
Si una función desea utilizar una variable global previamente definida, basta con utilizar su nombre sin realizar ningún tipo de declaración especial dentro de la función. Sin embargo, si la definición de la función aparece antes de la definición de la variable local, se requiere incluir una declaración de la variable global dentro de la función.
Para declarar una variable global se utiliza la palabra reservada extern. Al utilizar extern, le estamos diciendo al compilador que el espacio de memoria de esa variable está definido en otro lugar. Es más, en la declaración de una variable externa ( extern) no se puede incluir la asignación de un valor a dicha variable. Por otro lado, el nombre y el tipo de dato utilizados en la declaración de una variable global debe coincidir con el nombre y el tipo de dato de la variable global definida fuera de la función.
Debemos recordar que sólo se puede inicializar una variable global en su definición. El valor inicial que se le asigne a la variable global debe expresarse como una constante y no como una expresión. Es importante señalar que si no se asigna un valor inicial a la variable global, automaticamente se le asigna el valor 0 (0). De esta manera, las variables globales siempre cuentan con un valor inicial.
Cabe señalar que la declaración de una variable global puede hacer referencia a una variable que se encuentra definida en otro fichero. Por esta razón, podemos decir que el especificador de tipo extern hace referencia a una variable que ha sido definida en un lugar distinto al punto en el que se está declarando y donde se va a utilizar.
En aplicaciones grandes compuestas de varios ficheros, es común que las definiciones de las variables globales estén agrupadas y separadas del resto de ficheros fuente. Cuando se desea utilizar cualquiera de las variables globales en un fichero fuente, se debe incluir el fichero en el que están definidas las variables mediante la directiva de precompilación #include.
La utilización de variables globales porporciona un mecanismo de intercambio de información entre funciones sin necesidad de utilizar argumentos. Por otra parte,las variables globales mantienen el valor que se les ha asignado dentro de su ámbito, incluso después de finalizar las funciones que modifican dicho valor. Debemos tener en cuenta que el uso de variables globales para el intercambio de informaciones entre funciones puede resultar útil en algunas situaciones ( como cuando se desea transferir más de un valor desde una función), pero su utilización podría llevarnos a programas de dificil interpretación y complejos de depurar.
Cuando trabajamos con variables globales debemos distinguir entre la definición de una variable global y su declaración. Cuando definamos una variable local, lo hacemos de la misma forma en que se declara una variable ordinaria. La definición de una variable global se realiza fuera de cualquier función. Además, las definiciones de variables globales suelen aparecer antes de cualquier función que desee utilizar dicha variable. La razón es que una variable global se identifica por la localización de su definición dentro del programa. Cuando se defina una variable global automáticamente, se reserva memoria para el almacenamiento de ésta.Además, podemos asignarle un valor inicial a la misma.
Si una función desea utilizar una variable global previamente definida, basta con utilizar su nombre sin realizar ningún tipo de declaración especial dentro de la función. Sin embargo, si la definición de la función aparece antes de la definición de la variable local, se requiere incluir una declaración de la variable global dentro de la función.
Para declarar una variable global se utiliza la palabra reservada extern. Al utilizar extern, le estamos diciendo al compilador que el espacio de memoria de esa variable está definido en otro lugar. Es más, en la declaración de una variable externa ( extern) no se puede incluir la asignación de un valor a dicha variable. Por otro lado, el nombre y el tipo de dato utilizados en la declaración de una variable global debe coincidir con el nombre y el tipo de dato de la variable global definida fuera de la función.
Debemos recordar que sólo se puede inicializar una variable global en su definición. El valor inicial que se le asigne a la variable global debe expresarse como una constante y no como una expresión. Es importante señalar que si no se asigna un valor inicial a la variable global, automaticamente se le asigna el valor 0 (0). De esta manera, las variables globales siempre cuentan con un valor inicial.
Cabe señalar que la declaración de una variable global puede hacer referencia a una variable que se encuentra definida en otro fichero. Por esta razón, podemos decir que el especificador de tipo extern hace referencia a una variable que ha sido definida en un lugar distinto al punto en el que se está declarando y donde se va a utilizar.
En aplicaciones grandes compuestas de varios ficheros, es común que las definiciones de las variables globales estén agrupadas y separadas del resto de ficheros fuente. Cuando se desea utilizar cualquiera de las variables globales en un fichero fuente, se debe incluir el fichero en el que están definidas las variables mediante la directiva de precompilación #include.
Etiquetas:
curso lenguaje C,
curso programación,
curso programación en C,
lenguaje C
lunes 2 de marzo de 2009
CURSO FUNCIONES EN C: EJERCICIO PRÁCTICO 3
Utilización del mismo indentificador de variable en diferentes funciones mostrando su localidad.
#include
void imprimeValor () ;
main ()
{
int contador = 0 ;
contador ++ ;
printf ("El valor de contador es : %d\n", contador) ;
imprimeValor () ;
printf ("Ahora el valor de contador es : %d\n", contador) ;
return 0 ;
}
void imprimeValor ()
{
int contador = 5 ;
printf (" El valor de contador es : %d\n", contador ) ;
}
La salida es
El valor de contador : 1
El valor de contador : 5
Ahora el valor de contador es: 1
Fuente: Fundamentos de programación, de J.M.Molina, F.Chamorro ed.McGraw Hill
#include
void imprimeValor () ;
main ()
{
int contador = 0 ;
contador ++ ;
printf ("El valor de contador es : %d\n", contador) ;
imprimeValor () ;
printf ("Ahora el valor de contador es : %d\n", contador) ;
return 0 ;
}
void imprimeValor ()
{
int contador = 5 ;
printf (" El valor de contador es : %d\n", contador ) ;
}
La salida es
El valor de contador : 1
El valor de contador : 5
Ahora el valor de contador es: 1
F
Etiquetas:
curso lenguaje C,
curso programación en C,
lenguaje C,
programacion en C
Suscribirse a:
Entradas (Atom)