punteros1

Download PUNTEROS1

If you can't read please download the document

Upload: gabo-espin

Post on 15-Nov-2015

214 views

Category:

Documents


0 download

DESCRIPTION

apuntes punteros

TRANSCRIPT

PUNTEROSIngresar a la posicin deseada.Relacionados con la memoria en C, nos corresponde accediendo a las localidades de memoria.FORMATO BINARIO:(1,0)1,2,4,8,16,32,64,128....FORMATO HEXADECIMAL:(16)1,2,3,4,5,6,7,8,9,A,B,C,D,E,FA=10B=11C=12D=13E=14F=15ENTONCES SI: 255--> 1111=F 1111=FEJ. POSICION: 021FBASTEIRSCO(*) IDENTIFICA A UN PUNTERO.CREAR UN PUNTERO ES SIMILAR A CREAR UNA VARIABLE.HAY PUNTEROS CON TODOS LOS TIPOS DE DATOS.PUNTERO CREA UNA REFERENCIA A MEMORIA.UTILIZAR EL AMPERSAN PARA CREAR LA REFERENCIA:num*aa=&num -- > ya se crea la referenciaTIPO DE DATO DE NUM , a DEBEN SER LOS MISMOS.** RECOMENDACIN : Se recomienda utilizar """pnum"""Es decir: int num; int *pnum;#include #include int main(){ int num; num=2; int *a; a=&num;//a almacena el valor de num printf("%p",&a);// direccion almacenada en a --> %p es para formato hexadecimal printf("\n%d",*a);//valor de a --> %d para el valor }#include #include int main(){ int num; int *a; int b; num=2; a=&num; b=a*;//* valor es igual a 2 ; si era & entonces es la direccion es igual a 021FB }RECOMENDACIN 2:Pa inicializar un puntero se debe igualar a NULO, pa evitar q el puntero haga referencia a otra localidad.int a*=NULL#include #include int main(){ char num; num='Y'; char *pa=NULL; pa=&num;//a almacena el valor de num printf("%p",&pa);// direccion almacenada en a --> %p es para formato hexadecimal printf("\n%c",*pa);//valor de a --> %d para el valor}POSICIONES Y ARREGLOS CON PUNTEROS #include #include int main(){ int a[4]={7,3,5,20}; int *pa,posicion; pa=&a;//referencia con a posicion = *(pa+2);//accede a la primera posicion printf("%d",posicion);}#include #include int main(){ int a[4]={7,3,5,20}; int *pa,i,posicion; pa=&a;//referencia con a //accede a la primera posicion for(i=0;i direccion variable * --> valor variableESTRUCTURAS-----------Procesamiento de matrculaREQUISITOS:nombre_estudiante charnumero_unico intnumero_creditos intperiodo charUna estructura es similar a tener un arreglo. En un arreglo tenemos un conjunto de variables. Donde esas variables son del mismo tipo.Una estructura tiene variables de distinto tipo.Para identificar una estructura se pone STRUCTLOS 4 REQUISITOS SE ALMACENAN EN STRUCT.El nombre de la STRUCT es ficha_estudiante ES UNA PLANTILLA PARA TODOSSe las reparte a 4 estudiantes entonces a lo q ellos las llenan estas fichas se convierten EN VARIABLES.LO MISMO SER PARA INFORMACIN DEL PROFESOR Y DE LA MATERIA.PODEMOS DECLARAR UNA ESTRUCTURA ADENTRO O AFUERA DE mainLo recomendable es declarar una estructura fuera de main.#include #include struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; }f_juan,f_maria,f_pedro,f_lucia; //con todo el codigo creamos la plantilla de datos de los estudiantes. //Se debe declarar variables de la ficha antes del ;int main() { }Hay como declarar 2 veces, es dentro de main o fuera de main (f_juan,...)#include #include struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; }; //con todo el codigo creamos la plantilla de datos de los estudiantes. //Se debe declarar variables de la ficha antes del ;int main() { struct ficha_estudiante f_pedro; //TIPO DE DATO STRUCT }#include #include struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; }; //con todo el codigo creamos la plantilla de datos de los estudiantes. //Se debe declarar variables de la ficha antes del ;int main() { struct ficha_estudiante f_lucia; //TIPO DE DATO STRUCT struct ficha_estudiante f_pedro; struct ficha_estudiante f_juan; struct ficha_estudiante f_maria; f_pedro={"Pedro",20127,70,"2014B"};//si no asignamos un valor, C coloca el valor NULO. Ej: Quitar 2014B SI TENEMOS EN UN MIEMBRO DE LA ESTRUCTURA DIFERENTES TIPOS DE DATOS COMO: int, char, int. SE DEBE CREAR OTRA ESTRUCTURA Ej:fecha de nacimiento: 03/diciembre/1988struct fecha_n{int dia;char mes[30];int anio;};struct ficha_estudiante{---------------------------struct fecha_n fecha_nacimiento;} struct fecha_n es un estructura anidada.- PRIMERO SE DEBE DECLARAR LA ESTRUCTURA FECHA DE NACIMIENTO ES DECIR LA QUE ESTA ANIDADA +++++Ej. si queremos pa 40 estudiantes es necesario hacer la ficha estudiante como un arreglo.FORMAS DE DECLARACIN#include #include int main(){ struct ficha_estudiante fichas_e[40]; //segunda forma de declarar }struct ficha_estudiante { };ficha_e[40]; //Primera forma de declararEJEMPLO..............CON ESTRUCTURAS ANIDADAS#include #include struct fecha_nacimiento { int dia; char mes[30]; int anio; };struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; struct fecha_nacimiento; }ficha_e[40];//con todo el codigo creamos la plantilla de datos de los estudiantes.//Se debe declarar variables de la ficha antes del ;int main() { }#include #include struct fecha { int dia; char mes[30]; int anio; }fecha_nacimiento;struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; //struct fecha fecha_nacimiento; }f_juan;//con todo el codigo creamos la plantilla de datos de los estudiantes.//Se debe declarar variables de la ficha antes del ;int main() { printf("Ingrese nombre\n"); scanf("%s",&f_juan.nombre); printf("Ingrese numero unico\n"); scanf("%s",&f_juan.numero_unico); printf("Ingrese numero de creditos\n"); scanf("%s",&f_juan.numero_creditos); printf("Ingrese periodo\n"); scanf("%s",&f_juan.periodo); // printf("Ingrese fecha nacimiento\n"); // scanf("%s",&f_juan.fecha_nacimiento); }//importante : SI QUIERO INGRESAR NOMBRE _ APELLIDO UTILIZO LA PARTE DE gets(f_juan.nombre);CON FUNCIONES:#include #include struct fecha { int dia; char mes[30]; int anio; }fecha_nacimiento;struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; struct fecha fecha_nacimiento; }f_juan; //VARIAS VARIABLES DE UNA ESTRUCTURA SE LA HACE X ARREGLOS EJ: ficha_e[10]; //con todo el codigo creamos la plantilla de datos de los estudiantes.//Se debe declarar variables de la ficha antes del ;int main() { printf("Ingrese nombre\n"); scanf("%s",&f_juan.nombre); printf("Ingrese numero unico\n"); scanf("%s",&f_juan.numero_unico); printf("Ingrese numero de creditos\n"); scanf("%s",&f_juan.numero_creditos); printf("Ingrese periodo\n"); scanf("%s",&f_juan.periodo); printf("Ingrese fecha nacimiento\n"); printf("Ingrese dia:\n"); scanf("%d",&f_juan.fecha_nacimiento.dia); printf("Ingrese mes:\n"); scanf("%s",&f_juan.fecha_nacimiento.mes); printf("Ingrese anio:\n"); scanf("%d",&f_juan.fecha_nacimiento.anio); // scanf("%s",&f_juan.fecha_nacimiento); }-----------------------#include #include struct fecha ingresar_fecha();struct ficha_estudiante ingresar_datos();struct fecha { int dia; char mes[30]; int anio; }f_fecha;struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; struct fecha fecha_nacimiento; }ficha_e[10],f_estudiante;//VARIAS VARIABLES DE UNA ESTRUCTURA SE LA HACE X ARREGLOS EJ: ficha_e[10]; //VARIABLE AUXILIAR FICHA ESTUDIANTE : Guardar datos temporalmente, hasta q se le llame nuevamente en main. int main () { ingresar_datos(); }struct fecha ingresar_fecha() { printf("Ingrese dia:\n"); scanf("%d",&f_fecha.dia); printf("Ingrese mes:\n"); scanf("%s",&f_fecha.mes); printf("Ingrese anio:\n"); scanf("%d",&f_fecha.anio); return f_fecha; }struct ficha_estudiante ingresar_datos() // CON FUNCIONES { printf("Ingrese nombre\n"); scanf("%s",&f_estudiante.nombre); printf("Ingrese numero unico\n"); scanf("%s",&f_estudiante.numero_unico); printf("Ingrese numero de creditos\n"); scanf("%s",&f_estudiante.numero_creditos); printf("Ingrese periodo\n"); scanf("%s",&f_estudiante.periodo); printf("Ingrese Fecha-Nacimiento:\n"); f_estudiante.fecha_nacimiento=ingresar_fecha(); return f_estudiante; }INGRESAR A LAS FICHAS SIMULTNEAMENTE CON LAZO (for)#include #include struct fecha ingresar_fecha();struct ficha_estudiante ingresar_datos();struct fecha { int dia; char mes[30]; int anio; }f_fecha;struct ficha_estudiante { char nombre[100];//primer miembro de la estructura int numero_unico; int numero_creditos; char periodo[40]; struct fecha fecha_nacimiento; }ficha_e[10],f_estudiante;//VARIAS VARIABLES DE UNA ESTRUCTURA SE LA HACE X ARREGLOS EJ: ficha_e[10]; //VARIABLE AUXILIAR FICHA ESTUDIANTE : Guardar datos temporalmente, hasta q se le llame nuevamente en main. int main () { int i; for(i=0;i 8 ----> B --> 6PASE POR VALOR (SIN PUNTEROS)#include #include void cambiar (int a,int b);int main(){ int a,b; printf("Ingrese un numero para a:"); scanf("%d",&a); printf("Ingrese un numero para b:"); scanf("%d",&b); cambiar(a,b);//pase x referencia, utilizo punteros printf("VALOR DE a es:%d,VALOR DE b es:%d",a,b);}void cambiar (int a,int b) //a,b PUNTEROS{ int c; c=a;//en c alamacenar el valor al cual hace referencia el puntero a. Recuperar valor referencial. a=b; b=c; return;}//void --- puede ser q el usuario no ingrese nada.//PASE X REFERENCIA SE HACE CON PUNTEROSPASE POR REFERENCIA ( CON PUNTEROS)#include #include void cambiar (int *a,int *b);int main(){ int a,b; printf("Ingrese un numero para a:"); scanf("%d",&a); printf("Ingrese un numero para b:"); scanf("%d",&b); cambiar(&a,&b);//pase x referencia, utilizo punteros printf("VALOR DE a es:%d,VALOR DE b es:%d",a,b);}void cambiar (int *a,int *b) //a,b PUNTEROS{ int c; c=*a;//en c alamacenar el valor al cual hace referencia el puntero a. Recuperar valor referencial. *a=*b; *b=c; return;}//void --- puede ser q el usuario no ingrese nada.//PASE X REFERENCIA SE HACE CON PUNTEROSCONVERSION DE DATOS:#include #include int main(){ float c=4.22; int a; a=(int)c; printf("%d",a);}#include #include int main(){ char a='b',letra; int d; d=(int)a; letra=(char)d; printf("%d",d); printf("%c",letra);}PARAMETROS PARA FUNCION MAIN.void main(int argc,char*argv[])c=a+b;Tres variables: suma, a , bEn argc = 3 --> numero de variables --< verificar si el usuario manda el numero de parametros establecidoEn argv[0]=suma nombre del programa --> se alamacenan los valores q el usuario ingresa en la ejecucion.En argv[1]=3En argv[2]=2suma,3,2 --> SON STRING#include #include void main(int argc,char*argv[]){ int a; int b; int c; if(argc!=3) printf("ERROR EN NUMERO DE PARAMETROS\n"); else a=atoi(argv[1]);//atoi --> transformacion de string a entero b=atoi(argv[2]); c=a+b; printf("%d",c);}