Documente Academic
Documente Profesional
Documente Cultură
Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinamicas
de datos, tales como listas enlazadas, pilas, colas y rboles. Generalmente las variables
contienen valores especificos. Los punteros son variables pero en vez de contener un valor
especifico, contienen las direcciones de las variables a las que apuntan. Para obtener o
modificar el valor de la variable a la que apuntan se utiliza el operador de indireccin. Los
punteros, al ser variables deben ser declaradas como punteros antes de ser utilizadas.
Sintaxis[editar]
int *ptrID, ID;
ID = 8;
ptrID = &ID; // puntero a ID
ptrID es un puntero a int, mientras que la variable ID es solo una variable del tipo int. Todo
puntero debe ser precedido por un asterisco (*) en la declaracin.
Se puede declarar ms de un puntero en la misma sentencia. En el ejemplo que sigue se ve la
declaracin de dos punteros a int.
int *ptrY, *ptrX;
Operadores[editar]
Existen dos operadores a tener en cuenta cuando trabajamos con punteros. El operador de
direccin (&) que devuelve la direccin de memoria de su operando y el operador de
indireccin (*) que devuelve un alias para el objeto al cual apunta el operando del puntero.
En el siguiente ejemplo vemos como se inicializa una variable X con el valor 15. Luego se crea
un puntero a int y por ltimo el puntero pasa a apuntar a la variable X. Esto es, ptrX es un
puntero a X.
int X = 15;
int *ptrX;
ptrX = &X;
Punteros y matrices[editar]
Las matrices son punteros constantes. Una matriz sin subindice es un puntero al primer
elemento de la matriz.
int X[15];
int *ptrX;
ptrX = &X; // ptrX recibe la direccin del primer elemento ( 0 ) de X
As como tambin podra escribirse
int X[15];
int *ptrX;
ptrX = &X[0]; // ptrX es igual a la direccin del primer elemento de X
Se pueden utilizar distintos elementos de la matriz teniendo en cuenta la sintaxis de punteros.
int X[15], Y, *ptrX;
ptrX = X;
Y = *( ptrX + 7 );
En este caso puede verse que Y toma el valor del elemento 7 de la matriz X, siendo 7 el
desplazamiento dentro de la matriz. El operador de indireccin queda fuera del parntesis
porque tiene una prioridad superior a la del operador +. De no existir los parntesis, se
sumaria 7 al elemento X[0]. Teniendo en cuenta que las matrices son punteros constantes, el
nombre de la matriz puede tratarse como un puntero:
Y = *( X + 7 );
Aritmtica de Punteros[editar]
Al usar punteros a matrices, hay que tener en cuenta que la aritmtica cambia sensiblemente.
#include <iostream>
using std::cout;
using std::endl;
void main()
{
int X[6] = { 1, 2, 3, 4, 5, 6 };
int *prtX;
prtX = X; // incializo el valor del puntero.
cout <<
prtX +=
cout <<
prtX -=
cout <<
prtX++;
cout <<
}
atte: Oscar Torres & David Paz
En el siguiente cdigo, primero se crea un puntero a un arreglo de 6 elementos y si inicializa el
puntero prtX al primer elemento del arreglo X[0]. Si tenemos en cuenta que el siguiente
ejemplo se ejecuta en una computadora con enteros de 4 bytes, el segundo elemento de la
Matrices de punteros[editar]
Para realizar una estructura de datos dinmica, se puede utilizar una matriz donde sus
elementos sean punteros. Suponiendo que queramos hacer un calendario y lo dividamos por
semanas. Podramos utilizar una matriz con los das de la semana.
const char *dias[7] = { "Domingo", "Lunes", "Martes", "Miercoles",
"Jueves", "Viernes", "Sabado" }
Cada da de la semana, no es un elemento de la matriz, sino que la expresin dias[7] crea una
matriz de siete elementos como punteros a char.
Punteros a funciones[editar]
Teniendo en cuenta que el nombre de una funcin es en verdad la direccin de memoria
donde comienza el cdigo, los punteros a funciones contienen la direccin de memoria de la
funcin a la que apunta, y se pueden pasar y retornar entre funciones.
#include <iostream>
using namespace std;
bool functionA( int, int, bool (*)( int ) ); //Prototipo
bool functionB( int ); //Prototipo
void main()
{
int x = 113, y = 226;
if ( functionA( x, y, functionB ) )
cout << "\nEl resultado es verdadero";
else
cout << "\nEl resultado es falso";
}
bool functionA( int param1, int param2, bool (*verificar)( int ) )
{
if ( ( (*verificar)( param1 ) ) && ( (*verificar)( param2 ) )
)
return true;
}
bool functionB( int param )
{
if ( param > 100 )
return true;
else
return false;
}
En el ejemplo anterior podr ver que en la definicin de los prototipos, la funcin functionA
recibe tres parmetros, siendo el tercer parmetro un puntero a la funcion functionB,
practicamente copiando el prototipo sin el nombre. Cuando se ejecuta functionA, se le pasa
como parametro el nombre de la funcin
Ordenamiento burbuja[editar]
Ordenamiento burbuja utilizando punteros
#include <iostream>
#include <iomanip>
using namespace std;
void orden( int *, const int ); // prototipo
void swap( int * const, int * const ); // prototipo
int main()
{
const int nSize = 10;
int a[ nSize ] = { 3, 9, 14, 27, 18, 154, 8, 6, 74, 33 };
cout << "\nElementos a ordenar\n";
for ( int j = 0; j < nSize; j++ )
cout << setw( 5 ) << a[ j ];
orden( a, nSize );
// ordena el arreglo
}
void orden( int *matriz, const int nSize )
{
for ( int pasada = 0; pasada < nSize - 1; pasada++ )
{
for ( int k = 0; k < nSize - 1; k++ )
{
if ( matriz[ k ] > matriz[ k + 1 ] )
{
swap( &matriz[ k ], &matriz[ k + 1 ] );
}
}
}
}
void swap( int * const ptrElemento1, int * const ptrElemento2 )
{
int mantiene = *ptrElemento1;
*ptrElemento1 = *ptrElemento2;
*ptrElemento2 = mantiene;
}
El codigo es muy simple pero muy trabajado y depurado, esta relizado con if/while.... lo mas
complicado son los apuntadores, pero nada del otro mundo, muestra el perfecto uso de
funciones, tiene una clave: jahvi, de todas lo puedes leer en el codigo. Compila perfecto en
DEV C++. Tiene una interfaces muy creativa, ideal para estudiantes que se estn inciando en
el desarrollo de software con programacin estructurada. recuerda copiarlo en un pagina en
blanco en dev c++ desde aqui: (copialo completo y compilalo)
#include
#include
#include
#include
#include
<stdio.h>
<iostream>
<conio.h>
<stdlib.h>
<string.h>
cola cola_n=NULL;
cola cola_vip=NULL;
int solic;
void insertar (cola *cola_n)
{
cola aux, creado;
creado=(pnodo)malloc(sizeof(tiponodo));
cout<<"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<<en
dl;
cout<<"
||||||||||||||||||||METROPOLI
banco
universal||||||||||||||||||||"<<endl;
cout<<"
|||||||||||||||||||||||Le
da
la
bienvenida|||||||||||||||||||||||"<<endl;
cout<<"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<<en
dl;
cout<<"
Estimado cliente: Introduzca su numero de cedula"<<endl;
cin>>
creado->cedula;
cout<<"
Pronto sera atendido"<<endl;
if ((*cola_n)==NULL)
{
creado->siguiente=*cola_n;
*cola_n=creado;
}
else
{
aux=*cola_n;
while(aux!=NULL)
{
if(aux->siguiente==NULL)
{
creado->siguiente=aux->siguiente;
aux->siguiente=creado;
aux=aux->siguiente;
}
aux=aux->siguiente;
}
}
}
void mostrar_cola (cola cola_n)
{
cola aux;
aux=cola_n;
if(aux==NULL)
{
cout<<"No hay clientes en cola"<<endl;
}
else
{
while(aux!=NULL)
{
cout<<"Cedula: "<<aux->cedula<<endl;
cout<<""<<endl;
aux=aux->siguiente;
cout<<"*
Clientes
ordenados
por
orden
de
llegada((((((SIMCOLAS))))))"<<endl;
}
}
}
//modificado hasta ac... falta de orden por parte del creador
void insertar_vip (cola *cola_vip){
cola aux_2, creado_vip;
creado_vip=(pnodo)malloc(sizeof(tiponodo));
cout<<"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<<en
dl;//62
cout<<"
||||||||||||||||||||METROPOLI
banco
universal||||||||||||||||||||"<<endl;
cout<<"
|||||||||||||||||||||||Le
da
la
bienvenida|||||||||||||||||||||||"<<endl;
cout<<"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<<en
dl;
cout<<"
Estimado cliente: Introduzca su numero de
cedula"<<endl;
cin>>
creado_vip->cedula;
cout<<"
Pronto sera atendido"<<endl;
if ((*cola_vip)==NULL){
creado_vip->siguiente=*cola_vip;
*cola_vip=creado_vip;
}else{
aux_2=*cola_vip;
while(aux_2!=NULL){
if(aux_2->siguiente==NULL){
creado_vip->siguiente=aux_2->siguiente;
aux_2->siguiente=creado_vip;
aux_2=aux_2->siguiente;
}
aux_2=aux_2->siguiente;
}
}
}
void mostrar_cola_vip (cola cola_vip){
cola aux_2;
aux_2=cola_vip;
if(aux_2==NULL){
cout<<"No hay clientes V.I.P en cola"<<endl;
}else{
while(aux_2!=NULL){
cout<<"Cedula: "<<aux_2->cedula<<endl;
cout<<""<<endl;
cout<<"* Clientes ordenados
llegada((((((SIMCOLAS))))))"<<endl;
aux_2=aux_2->siguiente;
}
}
}
por
orden
de
void
void
void
void
void
void
void
menu();
Insertar();
insertar_vip();
mostrar_cola();
mostrar_colavip();
solicitar_numero();
salir();
struct perly{
char uxer[];
}data;
struct perly *p = &data;
V.I.P
en
cola
{
system("color 0a");
cout<<"
*
*
*
"<<endl;
cout<<"
*
*
"<<endl;
cout<<"
*
|
*
*
*
* "<<endl;
cout<<"
*
-+*
"<<endl;
cout<<"
__
|
*
*
*
*
"<<endl;
cout<<"
___| |
*
_|_
*
____
____
"<<endl;
cout<<"
[_]||__
_| |_
*
|
|....| |....|
*
*
"<<endl;
cout<<"
|
|
_|[] []|_
___
|
|....| | ___|__
"<<endl;
cout<<"
[_]| |__|_ ______| |
| |_| |....| || -- - |
*
* "<<endl;
cout<<"
|________ |__
| |# #| |_| |....| || - -- |
_____
"<<endl;
cout<<"
[_]| _____ |
|__[]| |
| |_| |....|__|| -- - | |
* * *|
"<<endl;
cout<<"
| [___] |
|__ |# #| |_| |....|__|| -- -_|_|
* * *|
"<<endl;
cout<<"
[_]|
|
| |
|__| |__|....| || ___|* *|
* * *|
"<<endl;
cout<<"
| _____ |
|__ #|_______|....| | |* *|* *|
* * *|
"<<endl;
cout<<"
[_]| [___] |
|__|_______|__ | | |* *|* *|
* * *|
"<<endl;
cout<<"
|
|
__|_____________|__
|* *|* *|
* * *|
"<<endl;
cout<<"
[_]| _____ |
_|___________________|_ |* *|* *|
* * *|
"<<endl;
cout<<"
| [___] |
|_______________________|
______________
"<<endl;
cout<<"
__|_______|_________|_______________________|
_________________ "<<endl;
cout<<"
|
_______________________________________________________________|"<<end
l;
cout<<"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<<en
dl;//62
cout<<"
||||||||||||||||||||METROPOLI
banco
universal||||||||||||||||||||"<<endl;
cout<<"
||||||||||||Sistema Integral para el Manejo de
COLAS|||||||||||||"<<endl;
cout<<"
|||||||||||||||||||||||||||||
SIMCOLAS||||||||||||||||||||||||||||"<<endl;
cout<<"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<<en
dl;
cout<<"
|||||||||Creado por: Javier Rodriguez CaracasVenezuela||||||||||"<<endl;
cout<<"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<<en
dl;
cout<<"
Login: ";
char usuario[6] = "jahvi";
cin.getline(p->uxer,6);
if (strcmp(p->uxer,usuario) == 0) {
cout<<"Bienvenid@ al sistema "<<endl;
menu();
cout<<""<<endl;
}else{
cout<<"Acceso Denegado. Consulte
al Admisnistrador "<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
void menu() {
short a;
do {
cout<<""<<endl;
cout<< "0 - Agregar Cliente"<<endl;
cout<< "1 - Agregar Cliente V.I.P"<<endl;
cout<< "2 - Solicitar Numero"<<endl;
cout<< "3 - Mostrar Cola"<<endl;
cout<< "4 - Mostrar Cola V.I.P"<<endl;
cout<< "5 - Salir del Sistema"<<endl;
cout<<""<<endl;
fflush(stdout);
cout<<"Opcion #:";
cin>>a;
cout<<""<<endl;
if (a == 5)
exit(1);
switch(a){
case 0 :
Insertar();
break;
case 1 :
insertar_vip();
break;
case 2 :
solicitar_numero();
break;
case 3 :
mostrar_cola();
break;
case 4 :
mostrar_colavip();
break;
case 5 :
salir();
break;
default :
puts("Usted no ha seleccionado nada, porfavor seleccione
algo\n");
break;
};
} while (1);
}
void Insertar(){
insertar(&cola_n);
}
void insertar_vip(){
insertar(&cola_vip);
}
void mostrar_cola(){
mostrar_cola(cola_n);
}
void mostrar_colavip(){
mostrar_cola_vip(cola_vip);
}
void solicitar_numero(){
pop(&cola_n);
if(cola_vip!=NULL){
pop_vip(&cola_vip);
}else{
cout<<"No
((((((SIMCOLAS))))))"<<endl;
}
hay
cliente
V.I.P
en
cola
}
void salir(){
}
normal que se conoce toda la vida de cuatro cablesitos con una terminal grande relativamente y
tiene cuatro orificios que es donde entran los conectores del ide y el ata tiene una miniestrada para
el cable de informacion osea ya es uan tipo tarjetita nada que ver con el ide y la corriente igual es
muy diferente por o demas dentro de su bolsa los dos son muy parecidos algunos ata son mas
pequeos pero en lo grueso solamente y en desempeo pues la transmicion de informacion es una
diferencia garrafal el ata te transmite hasta 3 gb por segundo mientras que el ide no llega a uno asi
que un ata es muy pero muy buen disco comparado con el ide y en cuanto a conectarlo a tu mother
pues tendras que checar que tu mother traiga conexiones ata son unas pequeitas que
normalmente vienen de colores que tienen una entrada como en "L" y tambien tendras que ver si tu
funete trae un conectoa de corriente ata que ese no es tan importante porque ya los venden los
adaptadores pero eso es loq ue tienes que checar
Calificacin y comentarios del preguntador
Muy Buena
0
Comentario
o
0
o
Comentario
o
1
o
Comentario
o
1
o
o
Comentario
1
o
Comentario