Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Operador dirección-de
6AB34
El operador & ( dirección de) da la dirección de su variable. Por ejemplo,
a
int a = 7; // la variable entera 'a' almacena el valor 7 7 a
printf("dirección de memoria= %p, dato= %d\n", &a, a);
6AB36
ya utilizábamos el &
scanf(“%d”,&a);
int 2 byte
char 1byte
float 4 byte
Sistema decimal
7 2
1 3 2
1 1
00000000 00000111
El resultado desde el punto de vista gráfico puede verlo en la. figura siguiente. La figura
representa un segmento de memoria de n bytes. En este segmento localizamos el entero 7
de dos bytes de longitud, en la dirección 13162. La variable a representa al valor 7 y &a
(dirección de a; esto es, donde se localiza a) es 13162.
6AB34
7
a
6AB34
a
int a;
int *pa; 18
pa
a = 10;
pa = 12; //esto es error
6AB34
pa = &a; esto es correcto
a = 20;
*pa = 18;
printf(“%d”,a); //me muestra 18
printf(“%d”,*pa); //me muestra 18
printf(“%p”,&a); //me muestra 6AB34
printf(“%p”,pa); //me muestra 6AB34
Operador de indirección
Un puntero es una variable capaz de contener una dirección de memoria que indica dónde
se localiza un objeto de un tipo especificado (por ejemplo, un entero). La sintaxis para
definir un puntero es:
tipo *identificador;
donde tipo es el tipo del objeto apuntado e identificador el nombre del puntero.
El siguiente ejemplo declara un puntero px a un valor entero x y después asigna este valor
al entero y.
px x y
7 7
int main()
{
int *px, x = 7, y= 0; // px es un puntero a un valor entero
px = &x; // en el puntero px se almacena la dirección de x
y= *px; //a la variable y se le asigna el valor localizado en la dirección
// almacenada en px
}
13162
13162 7 7
px x y
Apunta
Lo que indica que el contenido de px (*px) es 7. La sentencia y = *px se lee "y igual al
contenido de px". De una forma más explícita diríamos "y igual al contenido de la dirección
dada por px".
El prototipo de una función es una plantilla que se utiliza para asegurar que una sentencia
de invocación escrita antes de la definición de la función, es correcta: esto es, que son
especificados los argumentos adecuados y que el valor retornado se trata correctamente.
La lista de parámetros normalmente consiste en una lista de identificadores con sus tipos,
separados por comas. En el caso de que se trate del prototipo de una función, se pueden
omitir los identificadores. Por ejemplo:
Para asegurar la portabilidad de los programas, se puede utilizar el tipo void para especificar
que una función no acepta argumentos, ya que, a diferencia de C++, en el lenguaje C
estándar la ausencia de parámetros y la no especificación de void indica cualquier número
y tipo de argumentos. Según esto, las declaraciones siguientes tienen la misma validez,
aunque con significados diferentes.
#include <stdio.h>
La definición de una función consta de una cabecera de función y del cuerpo de la función
encerrado entre llaves.
Las variables declaradas en el cuerpo de la función son locales y por definición solamente
son accesibles dentro del mismo.
El tipo del resultado especifica qué tipo de datos retorna la función. Este, puede ser
cualquier tipo fundamental, o tipo definido por el usuario, pero no puede ser un array o una
función. Si no se especifica, se supone que es int. El resultado de una función es devuelto a
la sentencia de llamada, por medio de la sentencia:
return [()expresión[));
Esta sentencia puede ser o no la última y puede aparecer más de una vez en el cuerpo de la
función. En el caso de que la función no retorne un valor, se puede omitir o especificar
simplemente return. Por ejemplo,
void fnEscribir()
{
// …
return;
}
Los parámetros formales de una función son las variables que reciben los valores de los
argumentos especificados en la llamada a la función. Consisten en una lista de
identificadores con sus tipos, separados por comas. A continuación puede ver un ejemplo:
Para ejecutar una función hay que llamarla. La llamada a una función consta del nombre de
la misma y de una lista de argumentos, denominados parámetros actuales, encerrados
entre paréntesis y separados por comas. Por ejemplo:
Cuando se llama a una función, el valor del primer argumento actual es pasado al primer
parámetro formal, el valor del segundo argumento actual es pasado al segundo parámetro
formal y así sucesivamente. Por defecto, todos los argumentos, excepto los arrays, son
pasados por valor. Esto significa que a la función se pasa una copia del valor del argumento,
no su dirección. Esto hace que la función invocada, no pueda alterar las variables que
contienen los valores pasados.
En el siguiente ejemplo, puede observar que la función main llama a la función intercambio
y le pasa los argumentos a y b. La función intercambio almacena en x el valor de a y en y el
valor de b. Esto significa que los datos a y b se han duplicado. Esto es, ocurren las siguientes
asignaciones:
x=a
y=b
20 30
a b
20 30
x y
20 30
a b
20 20 30
z x y
16382 16384
20 30
a b
3. Ahora x apunta al dato a; esto es, el valor de x especifica el lugar donde se localiza
el dato a dentro de la memoria. Análogamente, diremos que y apunta al dato b.
16382 16384
x y
20 30
a b
Observe que *x hace referencia al mismo dato de memoria que a y que *y hace
referencia al mismo dato de memoria que b.
20 16382 16384
z x y
30 20
a b
Cuando la función intercambio finaliza, los valores de a y b han sido intercambiados y las
variables x e y, por el hecho de ser locales, son destruidas.
La función scanf lee valores introducidos por el teclado y los asigna a las variables
especificadas; en el ejemplo, a las variables a y b. Ahora, observe que dichas variables son
pasadas por referencia o dirección y no por valor. Por el contrario, la función printf escribe
los valores de las variables o expresiones especificadas; en este caso, observe cómo la
variable s es pasada por valor.
Más adelante estudiaremos con más detalle las funciones printf y scanf.
int a;
int *p; a
p=&a; 85
a=15;
*p=85; p
B4568
B4568
Codificación en lenguaje C
#include <stdio.h>
#include <windows.h>
// Prototipos de la funciones del programa
void Pares_Impares();
int Perfecto(int n);
void Numero_Perfecto();
void Inverso();
void Tiempo();
int main()
{
int opcion;
printf("MENU DE OPCIONES \n");
printf("\n 1.- Pares e Impares ");
printf("\n 2.- Numero Perfecto ");
printf("\n 3.- Numero Invertido ");
printf("\n Seleccione una opcion: ");
scanf("%d",&opcion);
switch(opcion)
{
case 1: Pares_Impares(); break;
case 2: Numero_Perfecto(); break;
case 3: Inverso(); break;
default: break;
}
Sleep(5000);
Ejercicio 1
Realizar un programa que tenga una función con un puntero a cadena de caracteres
como parámetro, esta función retorna en su nombre la dirección de la cadena convertida
de minúsculas a mayúsculas. El programa debe leer una cadena de caracteres que se
envía a la función para imprimirla en mayúsculas.
Ejercicio 2
Elaborar un programa que lea una línea de entrada en una cadena de caracteres y cuente
cuántos caracteres son dígitos, letras mayúsculas y letras minúsculas; luego imprimir
los resultados. Usar teoría de punteros.
Ejercicio 3
Realizar un programa que introduzca una cadena de caracteres, para modificarla letra a
letra restando 30 del valor numérico que se utiliza para representar cada letra en código
ASCII. Escribir la cadena en forma codificada, luego decodificar la cadena y escribirla.
Ejercicio 4
Ejercicio 5
Ejercicio 6
Escribir un programa que tenga una función que permita intercambiar los valores
de tres variables a, b y c, si es necesario, de tal manera que se cumpla la
relación:
a <= b <= c
El programa debe leer los datos a, b y c para llamar a la función, y escribir los
resultados antes y después de llamar a la función.
Ejercicio 7
utilizando la fórmula:
−𝑏 ± √𝑏 2 − 4𝑎𝑐
𝑥=
2𝑎
Elaborar una función que reciba las variables n y r, para imprimir el número de
combinaciones de n objetos tomados de r en r. El número de combinaciones de
n objetos tomados de r en r se calcula con la siguiente fórmula:
𝑛 𝑛!
( )=
𝑟 (𝑛
𝑟! − 𝑟)!
Realizar un programa que lea los números n y r para llamar a la función y luego
escribir los siguientes resultados:
Además, el programa debe tener una función adicional que calcule el factorial
de cualquier número.
25/11/2020.
imprimirá:
26 de noviembre de 2020
Validar los datos de ingreso para que se encuentren dentro del rango correcto
de los días, meses y años en otra función. Además, validar en el caso que sea
el año bisiesto esto también en otra función diferente.