Вы находитесь на странице: 1из 7

UNIVERSIDAD DE EL SALVADOR FACULTAD MULTIDISCIPLINARIA PARACENTRAL INGENIERA DE SISTEMAS INFORMTICOS PROGRAMACIN II GT 01 Doc: Yancy de Molina EJEMPLOS DE PUNTEROS

A continuacin se muestra una serie e programas de las diferentes formas de aplicar punteros. Solo el primer programa tiene las cabeceras, pero son las mismas para todos los restantes. Si usted ejecuta los programas debe ponerle las cabeceras al inicio. #include<iostream> #include<stdlib.h> #include<string.h> using namespace std; /*++++++++++++ Los punteros guardan direcciones de memoria************/ main(){ int n=75; char no[5]="HOLA"; int *p = &n; // asigna la direccin de n int **pp=&p;// asigna la direccin de p; char *pno=no; cout<<"n = "<<n<<" , &n = "<<&n<<", p = "<< p<<'\n'; cout << " &p = "<< &p<<'\n'; system("pause"); cout<<"p = "<<p<<" , &p = "<<&p<<", ppp = "<< pp<<'\n'; cout << " **pp = "<< **pp<<'\n'; system("pause"); cout<<"no = "<<no<<" , &no = "<<&no<<'\n'; cout<<"pno = "<<pno<<" , &pno = "<<&pno<<'\n'; cout << " *pno = "<< *pno<<'\n'; system("pause");

return 0; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /********* Punteros a array*************-- trabajando con memoria esttica*****/ main(){ int n[10],i; int *ptr; ptr=n; for(i=0;i<10;i++){ cout<<"numero"<<i<<'\n'; cin>> *(ptr+i); // notacin de punteros }

for(i=0;i<10;i++){ cout<<*(ptr+i)<<'\t'; } system("pause"); return 0; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ////////*** Array de punteros******** y memoria dinmica de tipo cadena/ void ordenar(char *c[]); // prototipo de funcin

main(){ int i; char *c[5]; cout<<"\nEscribir las cadena "; cout<<"\n "; for(i=0;i<5;i++){ c[i]=(char *) malloc (30 * sizeof(char)); //reserve de memoria dinmica cout<<"cadena"<<(i+1); cin.getline(c[i],30); } ordenar(c); cout<<"Lista Ordenada\n"; for(i=0;i<5;i++){ cout<<'\n'<<"cadena"<<(i+1)<<c[i]; } return 0; } void ordenar( char *c[]){ //ordenar la lista de nmeros con el mtodo de intercambio char *var; int i,x; for(x=0;x<5-1;++x){ //encontrar el menor del resto de los elementos for(i=x+1;i<5;++i){ if(strcmp(c[x],c[i])>0){ var=c[x]; c[x]=c[i]; c[i]=var; } } } }

//******** Trabajando siempre con array de punteros***/ main(){ int i,j; char *dato[12]; /// asignacin de memoria con el operador new for(i=0;i<5;i++){ dato[i]=new char[30]; cout<<"dato";fflush(stdin); cin.getline(dato[i],30); } for(i=0;i<5;i++){ cout<<(dato[i])<<'\n'; } system("pause"); return 0; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /* array de punteros y memory dinamica */ /* llena una matriz NXM y suma todas sus filas */ #define MAXF 50 void datos(int *a[MAXF], int nfilas, int ncols); // prototipo de funcin void suma(int *a[MAXF],int nfilas, int ncols); // prototipo de funcin main(){ int fila, nfilas,ncols; int *a[MAXF]; do{ cout<<"\n cuantas filas"; cin>>nfilas; cout<<"\n ";} while(nfilas<2 || nfilas >50); do{ cout<<"\n cuantas columnas"; cin>>ncols; cout<<"\n ";} while(ncols <2); for(fila=0;fila< nfilas;++fila){ a[fila]=new int [ncols]; // Reserva de memoria } cout<<"\n llenar el array \n"; datos(a,nfilas,ncols); cout<<"\n suma de los elementos \n"; suma(a,nfilas,ncols); return 0; }

void datos(int *a[MAXF], int m, int n){ int fila,col; for(fila=0;fila<m;++fila){ cout<<'\n'<<" introducir datos para la fila N."<<fila+1; for(col=0;col<n;++col){ cin>>*(a[fila]+col); } } }

void suma(int *a[MAXF],int m, int n){ int fila,col,suma=0; for(fila=0;fila<m;++fila){ for(col=0;col<n;++col){ cout<< *(a[fila] + col)<<" "; suma=suma + (*(a[fila]+col)); } cout<<suma; cout<<"\n"; suma=0; } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /* Se dispone de una puntero a un grupo de array (matriz) que almacena 50 nmeros reales */ main(){ float (*array)[10], matriz[5][10]; float *ptr; int i,j; //array=((matriz+0)+0); array=matriz; for(i=0;i<3;i++){ para cuestin de prueba solo se ha trabajado con 9 nmeros for(j=0;j<3;j++){ cout<<"datos"<<endl; cin >>(*(*(array+i)+j)); } cout<< endl; } for(i=0;i<3;i++){ for(j=0;j<3;j++){ cout<<(*(*(array+i)+j))<<" "; } cout<< endl; } return 0; }

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Aritmtica de puntero int main(){ char *p; char cadena[80]; cout<<"Introduzca la cadena"; cin.getline(cadena,sizeof(cadena)); //p apunt al primer caracter de la cadena p=cadena; //repetir mientra p no sea '\0'; while(*p){ // restar 32 constates de codigo ASCII if((*p>='a')&&(*p<='z')){ *p++=*p-32; }else p++; } cout<<"La cadena convertida es:"<<'\n'; cout<<cadena<<'\n'; return 0; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++ resta de dos punteros--- ++++++++++++++++++++++++++++++++++++ int main(){ int t [] = {200,300,500,600,700}; int* pt1 = &t[1]; int* pt2 = &t[4]; int res = pt2-pt1; //en vez de &t[2] se puede t+2;

cout<<"pt1 en [1]: "<<*pt1<<'\n'; cout<<"pt2 en [4]: "<<*pt2<<'\n'; cout<<"res: "<<res<<'\n'; return 0; }

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Punteros con funciones int lcadena(char *cad); char *scadena(char *cad); main(){ char cad[]="Universidad de El Salvador"; cout<<"La longitud de cadena es de:"; cout<<lcadena(cad); system("pause"); cout<<scadena(cad);

return 0; } int lcadena(char *cad){ int cuenta=0; while(*cad++){ cuenta++; } return (cuenta); } char *scadena(char *cad){ return cad; } //Ejemplo 2 de funciones int Lstrlen (char *str, int *pa); void main () { char cad[] = "hola"; int b=100; cout<<"b antes de llamar la funcin tiene"<<b<<'\n'; cout<<Lstrlen(&cad[0],&b)<<'\n'; cout<<"b despus de llamar la funcin tiene"<<b<<'\n'; } int Lstrlen (char *str,int *pb) { int a=0; while (*str++!='\0') { //alternativa--> while (str[a]!=0) {a++;} a++; } *pb=50; return a; } //Ejemplo 3 de funciones con punteros void funcion1( int *p_entero, int ** p_puntero); void main(){ int a =3, *pi; pi=&a; // pi apunta a la direccin de la variable a cout<<"pi antes de llamar la funcin tiene"<<*pi<<'\n'; funcion1( pi, &pi); cout<<"pi despues de llamar la funcin tiene"<<*pi<<'\n'; } void funcion1( int *p_entero, int ** p_puntero) { * p_entero = 5; // cambia el valor de a *p_entero = NULL; // cambia el valor de pi } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //Asignacin dinmica de memoria main(){ char *s;

int n; cout<<"tamao de la cadena"; cin>>n; s=(char *)calloc(n,sizeof(char)); //reserve n espacios de memoria del tamao char cout<<"cadena";fflush(stdin); cin.getline(s,n); cout<<s; return 0; } // Asignacin de memoria en C++ con el operador new; main(){ char *p; p=new char[80]; strcpy(p,"UNIVERSIDAD DE EL SALVADOR"); cout<< p<<'\n'; system("pause"); delete p; // se libera la memoria que se haba reservado cout<< p<<'\n'; return 0; } main(){ int n; char *s; cout<<"tamao de la cadena"; cin>>n; s=new char[n]; // reserve dinmica de memoria cout<<"cadena";fflush(stdin); // recuerde que al trabajar con cadenas debe limpiar el // buffer cin.getline(s,n); cout<<s; return 0; } main(){ int *dias=new int[3]; *dias=15; *(dias+1)=8; *(dias+2)=2010; cout<<"las fiestas del pueblo son"<< *dias<<"-"<<*(dias+1)<<"-"<<*(dias+2)<<'\n'; delete [ ] dias;//libera la memoria return 0; } main(){ char c; char *pc; // un puntero a una variable carcter pc=&c; for(c='A'; c<='Z';c++){ cout << *pc <<" ";// indireccin de pc } system("pause"); return 0; }

Вам также может понравиться