Diferencia entre revisiones de «Programación C y C++»

De Proyectos
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Sin resumen de edición
 
(No se muestran 18 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
= [[Estructuras]] =
= [[Estructuras]] =
= [[Punteros]] =
= [[Punteros]] =
= [[Memoria Dinámica]] =
= [[Archivos]] =
= [[Variables]] =
= [[PROGMEM]] =
= [[Casting]] =
= Otros =
*casting
*typedf -> cambia nombre del tipo a otro nombre personalizado. Ej. typedef strcut contacto contacto_t; //Ahora escribiendo contacto_t estoy escribiendo en realidad struct contacto.


= Variables =
= Documentación =
unsigned signed uint8_t byte int long char
[http://www.infor.uva.es/~belar/Ampliacion/Curso%202008_2009/Punteros_en_C.pdf Punteros en C]<br/>
 
[http://www.zator.com/Cpp/index.htm Curso de C++ - Zator System ]<br/>
= Punteros =
[http://c.conclase.net/curso/?cap=011#inicio Curso de C++ con clase]<br/>
*Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria
[http://www.elrincondelc.com/cursoc/cursoc14.html Curso de C - El Rincón de C]<br/>
*Para obtener la dirección de memoria de una variable se usa el operador de dirección"&"
[http://www.codeproject.com/Articles/6555/To-new-is-C-To-malloc-is-C-To-mix-them-is-sin Diferencias entre Malloc, Realloc, ... y New, Delete]<br/>
int i;
[http://www.angelfire.com/my/jimena/estructuras/archivos.html angelfire.com]<br/>
printf("direccion de memoria de la variable: %d", &i);
[http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos Wikilibros - Programación en C]<br/>
 
[http://www.cursomicros.com/avr/lenguaje-c/lenguajec.html cursomicros.com - Lenguaje C para Microcontroladores]<br/>
*Para acceder al contenido de una posición de memoria se utiliza el operador de indirección "*"
*Cuando se define un puntero se hace según un tipo de variable. Ese puntero solo puede apuntar a ese tipo de varaibles
*Los operadores "& y *" tiene mas prioridad que los operadores binarios (+, -, ...)
*Se pueden asignar punteros entre ellos:
int a = 8;
int *p = &a;
int *q;
q = p;
 
== Operaciones con Vectores ==
*Podemos manipular la dirección de memoria del puntero
<pre>
int *p;
int a[10];
 
p=&a;
printf("%d", *(p+0)); //Primera posicion del vector a ;
printf("%d", *(p+1)); //Segunda posicion del vector a;
</pre>
 
*Lo mismo se puede hacer restando
== Punteros y Vectores ==
'''Todos los vectores son en realidad punteros'''
<pre>
int a[10];
int *p;
 
p = a; //Ahora p puede acceder a las "casillas de a". Se escribe así porque la variable a, es un puntero
 
//Estos dos printfs son equivalentes
printf("%d", a[0]);
printf("%d", *p);
 
//Estos dos printfs son equivalentes
printf("%d", a[1]);
printf("%d", *(p+1)); //Sumamos 1 a la dirección de memoria haciendo que p apunte al siguiente elemento del vector
 
//En este ejemplo vemos que para imprimir un caracter y asignarle un valor lo hacemos normalmente:
char *c;
char b = 'H';
c = &b;
printf("%c", *c); //Cuando se imprime se pone el * para imprimir el dato que hay en la casilla a la cual apunta c.
 
//Aqui vemos que en una cadena de caracteres las operaciones de imprimir y asignar un valor son diferentes a como se hacen con el caracter y son similares a como se hacen con vectores de cadenas.
//Esto es por lo dicho anteriormente, los vectores de cadena son punteros.
//Estos dos ejemplos son equivalentes, los dos imprimiran Fran
char *cadena;
cadena = "Fran";
printf("%s", cadena);
 
char cadena2[]="Fran";
printg("%s", cadena2);
 
//Printfs equivalentes. Estos dos imprimiran F
char cadena[]="Fran";
printf("%c", cadena[0]);
printf("%c", *cadena);
</pre>
 
Explicación:
      Ejemplo1                        Ejemplo2
char cadena2[]="Fran";    ==    char *cadena = "Fran";
printf("%s", cadena2);    ==    printf("%s", cadena);
 
Con estos dos ejemplos vemos que cuando se hace la declaracion de una cadena de caracteres y luego se imprime es igual que como se hace con un puntero.<br/>
Cuando se imprime un puntero que apunta a un vector lo que se imprime es la primera posicion del vector. Para poder ir recorriendo el vector se le va sumando +1 al contenido de la memoria, asi si va desplazando entre las casillas.<br/>
Por tanto cuando ponemos en el printf la cadena lo que hacemos es pasarle al printf la dirección de memoria y con el operador %s indicamos que es un vector de caracteres y que tiene que ir recorriendolo todo.
 
Sabiendo esto y sabiendo de operaciones de punteros podemos hacer las equivalencias:
<pre>
char cadena="Fran";
printf("%c", cadena[0])    ==    printf("%c", *cadena);  //Primera posicion del vector
printf("%c", cadena[1])    ==    printf("%c", *(cadena+1); //Segunda posicion del vector
</pre>
 
== Documentación ==
[http://www.infor.uva.es/~belar/Ampliacion/Curso%202008_2009/Punteros_en_C.pdf Punteros en C]
 
= Otros =
typedf -> cambia nombre del tipo a otro nombre personalizado. Ej. typedef strcut contacto contacto_t; //Ahora escribiendo contacto_t estoy escribiendo en realidad struct contacto.

Revisión actual - 10:54 21 mar 2013