|
|
| (No se muestran 27 ediciones intermedias del mismo usuario) |
| Línea 1: |
Línea 1: |
| = Variables = | | = [[Estructuras]] = |
| unsigned signed uint8_t byte int long char
| | = [[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. |
|
| |
|
| = Estructuras = | | = Documentación = |
| == Definicion ==
| | [http://www.infor.uva.es/~belar/Ampliacion/Curso%202008_2009/Punteros_en_C.pdf Punteros en C]<br/> |
| *Permiten agrupar diferentes tipos de datos: int, long, char, ...
| | [http://www.zator.com/Cpp/index.htm Curso de C++ - Zator System ]<br/> |
| *Cada elemento de la estructura se llama miembro
| |
| == Declaracion ==
| |
| <pre>
| |
| struct nombre{<br/>
| |
| int variable1;<br/>
| |
| long variable2;<br/>
| |
| char variable3[40];<br/>
| |
| };
| |
| | |
| struct nombre pedro; //En C es obligatorio usar la palabra struct en la declaracion de un objeto struct, en C++ no lo es.
| |
| </pre>
| |
| El objeto pedro es un struct de tipo nombre.<br/>
| |
| <br/>
| |
| Otra forma de declarar:<br/>
| |
| <pre>
| |
| struct nombre{
| |
| int variable1;
| |
| long variable2;
| |
| char variable3[40];
| |
| }pedro;
| |
| </pre>
| |
| Para inicializar la variable pedro se hace como con los arrays,
| |
| <pre>
| |
| pedro = {2, 40, "hola"};
| |
| </pre>
| |
| Esto solo se usa en C, porque en C++ se pueden usar los constructores.<br/>
| |
| <br/>
| |
| En algunos compiladores es posible que se exiga poner antes de struct la palabra static.
| |
| | |
| == Acceder a la información ==
| |
| *Se utiliza el operador de selección (.) --> pedro.variable1
| |
| | |
| == Punteros ==
| |
| === Punteros a Estructuras ===
| |
| *Se declara un estructura normalmente
| |
| *Al declarar el objeto se pone el * para crear el puntero
| |
| *Para acceder a los miembros se utiliza el perador "->" en vez del el "."
| |
| <pre>
| |
| //Se declara una estructura | |
| struct estructura {
| |
| char variable1[30];
| |
| char varaible2[40];
| |
| int entero;
| |
| };
| |
| | |
| //Se crea un objeto y se inicializa | |
| struct estructura dato = {
| |
| "hola",
| |
| "adios",
| |
| 30
| |
| };
| |
| | |
| //Se declara un puntero
| |
| struct estructura *p_dato;
| |
| | |
| int main(){
| |
| //Se apunta p_dato al objeto creado
| |
| p_dato = &dato;
| |
| | |
| printf( "%s\n", p_dato->variable1 );
| |
| printf( "%s\n", p_dato->variable2 );
| |
| printf( "%s\n" , p_dato->entero );
| |
| }
| |
| </pre>
| |
| | |
| === Punteros a Arrays de Estructuras ===
| |
| | |
| <pre>
| |
| struct estructura {
| |
| char variable1[30];
| |
| char varaible2[40];
| |
| int entero;
| |
| };
| |
| | |
| struct estructura dato[] = {
| |
| "hola", "adios", 30,
| |
| "perro", "casa", 20,
| |
| "Coche", "moto", 4
| |
| };
| |
| | |
| | |
| struct estructura *p_dato;
| |
| | |
| int main(){
| |
| | |
| //Se pueden usar estas dos formas para apuntar. Las dos significan lo mismo
| |
| p_dato = dato;
| |
| p_dato = &dato[0];
| |
| | |
| int i;
| |
| for(i=0; i<3; i++){
| |
| printf( "%s\n", p_dato->variable1 );
| |
| printf( "%s\n", p_dato->variable2 );
| |
| printf( "%s\n" , p_dato->entero );
| |
| p_dato ++ //Con esto avanzamos al siguiente elemento del array
| |
| }
| |
| }
| |
| </pre>
| |
| | |
| == Pasar Estructuras a Funciones ==
| |
| *Se pasan igual que las variables
| |
| <pre>
| |
| void nombre_función ( struct nombre_de_la_estructura nombre_de_la variable_estructura ){
| |
| }
| |
| </pre>
| |
| *Al pasar la estructura a la función se hace mediante copia, es decir, que el valor original de un miembro de la estructura no cambia si dentro de la función lo modificamos
| |
| *Se puede pasar la estructura mediante punteros
| |
| | |
| struct estructura {
| |
| char variable1[30];
| |
| char varaible2[40];
| |
| int entero;
| |
| };
| |
| int main(){
| |
| struct estructura dato = {"hola", "adios", 10};
| |
| int numero;
| |
| '''numero = sumale_10(&dato);'''
| |
| }
| |
| int sumale_10('''struct estructura *dato'''){
| |
| '''return dato->entero+10; //Ahora en vez de poner el operador "." se pone el "->"'''
| |
| }
| |
| | |
| == Funciones dentro de las estructuras ==
| |
| *Aplicable a C++.
| |
| *Son funciones que manipulan los datos de dentro de la estructura.
| |
| === Constructor ===
| |
| *Es una función sin retorno y con el mismo nombre que la estructura
| |
| *Los valores no iniciados con los constructores contendran "basura"
| |
| *Se pueden definir varios constructores
| |
| | |
| Forma 1:
| |
| <pre> | |
| struct Punto {
| |
| int x, y;
| |
| Punto() {x = 0; y = 0;} // Constructor
| |
| } Punto1, Punto2;
| |
| </pre>
| |
| Forma 2:
| |
| <pre>
| |
| struct Punto {
| |
| int x, y;
| |
| Punto(); // Declaración del constructor
| |
| } Punto1, Punto2;
| |
|
| |
| // Definición del constructor, fuera de la estructura
| |
| Punto::Punto() {
| |
| x = 0;
| |
| y = 0;
| |
| }
| |
| </pre>
| |
| | |
| === Destructor ===
| |
| *Es igual pero con el simbolo ~ delante.
| |
| === Funciones ===
| |
| *Se pueden incluir otras funciones que se declaran y definen como las funciones normales.
| |
| <pre>
| |
| struct stPareja {
| |
| int A, B;
| |
| int LeeA() { return A;} // Devuelve el valor de A
| |
| int LeeB() { return B;} // Devuelve el valor de B
| |
| void GuardaA(int n) { A = n;} // Asigna un nuevo valor a A
| |
| void GuardaB(int n) { B = n;} // Asigna un nuevo valor a B
| |
| } Par;
| |
|
| |
| int main() {
| |
| Par.GuardaA(15);
| |
| Par.GuardaB(63);
| |
| cout << Par.LeeA() << endl;
| |
| cout << Par.LeeB() << endl;
| |
|
| |
| return 0;
| |
| }
| |
| </pre>
| |
| | |
| == Arrays de estructuras ==
| |
| Funcionan como los demas arrays
| |
| | |
| == Asignación de estructuras ==
| |
| Ver apartado en [http://c.conclase.net/curso/?cap=011#inicio Curso de C++ - con Clase]
| |
| | |
| == Documentación ==
| |
| [http://c.conclase.net/curso/?cap=011#inicio Curso de C++ con clase]<br/> | | [http://c.conclase.net/curso/?cap=011#inicio Curso de C++ con clase]<br/> |
| [http://www.elrincondelc.com/cursoc/cursoc14.html Curso de C - El Rincón de C]<br/> | | [http://www.elrincondelc.com/cursoc/cursoc14.html Curso de C - El Rincón de C]<br/> |
| | | [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/> |
| = Punteros =
| | [http://www.angelfire.com/my/jimena/estructuras/archivos.html angelfire.com]<br/> |
| [http://www.infor.uva.es/~belar/Ampliacion/Curso%202008_2009/Punteros_en_C.pdf Punteros en C] | | [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/> |
| 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.
| |