090414 Clase 14 de abril

Algunos ejemplos de punteros, constantes matematicas predefinidas y arreglos.
#include <stdio h> #include <math h> double a [] = { M_PI, M_E, M_E + M_PI}; int main() { double *p = & a[]; printf("%p: %f \n", p, *p); printf("%p: %f \n", p+1, *(p+1)); printf("%p: %f \n", p+2, *(p+2)); return ; }
sad@snarf:~/Escritorio/AUS/Segundo/Taller C$ gcc PunterosTest.c sad@snarf:~/Escritorio/AUS/Segundo/Taller C$ ./a.out 0x804a018: 3.141593 0x804a020: 2.718282 0x804a028: 5.859874
#include <stdio h> int a[] = { , 1 ,2 ,3}; int main () { int i, *p=& a[]; for (i=, i< sizeof(a)/sizeof(a[]; i++)) printf("%d \n", *(p+i)); for (i=, i < 4; i++) printf("%d \n", a[i]); for (i=, i < 4; i++) printf("%d \n", p[i]); /* puntero como arreglo */ for (i=, i < 4; i++) printf("%d \n", *(a+i)); /* arreglo como puntero */ return }
Un puntero como arreglo da lo mismo que un arreglo como puntero. Esto es porque, en C, un arreglo (de una dimension) ES un puntero. O casi...
Modificadores const y volatile
const convierte una variable en read-only Ej:
int i=1; const int j=2; i=j; /* esto es correcto */ j=i; /* Esto es un error */
int *p=&i; p=&j; *p=1;
const int *p=&i p=&j; /*correcto */ *p=1; /* ahora es un error*/
int *const p=&i; p=&j; /* error */ *p=1; /* Correcto */
const int *const p=&i; p=&j; /* error */ *p=1; /* error */
int flag == ; while (flag == ) ; /*no hacer nada */
volatile int flag == ; while (flag == ) ; /*no hacer nada */
Argumentos de main
Recibe tres argumentos:
- un int que representa el numero de argumentos
- un char** que contiene los argumentos en si
- un char** que contiene el entorno de ejecucion
#include <stdio> int main (int argc, char **argv, char **env) { int i; for (i=, i < argc; i++) printf("argv[%d]=%s\n",i,argv[i]); getchar(); for (i=, env[i]!=NULL; i++) printf("%s \n", env[i]); return ; }
Memoria Dinamica
Es una memoria extra alocada durante la ejecucion se pide con:
void *malloc (unsigned cuantosCharts)
int free(punteroObtenidoConMalloc)
Registros de datos y Lemuel Gulliver
Llilliput y Blufescu se peliaban por como se cascaba un huevo. Los primeros eran los Litle Endian y los segundos los Big Endian. Esto se utilizó para indicar como se almacenan los datos en memoria. Direccion -> ..| 12 | 34 | 56 | 78 | .. Esto es un procesador Big Endian ..| 78 | 56 | 34 | 12 | .. Esto es un procesador Litle Endian ..| 34 | 12 | 78 | 56 | .. PDP/11 un viejo en vias de extincion Un programita para averiguar que tipo es nuestro procesador.
#include <stdio h> int main() { int i=0x12345678; char *p=(char*)&i; // esto es para evitar el warnig por distintos tipos printf("%s \n", p[] == 0x12 && p[3] == 0x78 ? "big" : "litle"); return }
Trackback URL for "090414 Clase 14 de abril"
- Inicie sesión o regístrese para enviar comentarios
