-
Notifications
You must be signed in to change notification settings - Fork 0
/
Sobre C.txt
133 lines (91 loc) · 5.46 KB
/
Sobre C.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|| DATOS NUMERICOS ||
-int, float
|| DATOS ALFANUMERICOS ||
- String, char
|| BOOLEANOS ||
-Cualquier dato que es 0 es False, cualquier otro dato es True
|| OPERADORES ||
-Clasificación según:
-Operadores: Binarios: tienen dos o mas operandos (+, -, *, /)
Unarios: Solo tienen un unico operando (++, +=, --, -=, **, *=, etc.)
-Función: Aritméticos (+,-, *, /, ++, --)
Lógicos (!, &&, ||, ^^)
Bit a Bit (&, |, ^)
|| DIRECTIVAS DE PRE-COMPILADOR o PRE-PROCESADOR ||
Son algunas caracteristicas o tips que le damos al compilador
para que entienda mejor nuestro programa, es como una especie de configuración
del procesador.
Las mas comunes son:
- include, define, ifdef, ifndef
Include: Inicia con #, indica que vamos a "incluir" el codigo de
otro archivo en el actual.
|| STRUCT ||
Un struct es un mecanismo para definir nuevos tipos de datos complejos o estructurados
En un struct se puede guardar tipos de datos primitivos o incluso otros struct
Si la estructura se pasa como argumento, osea su direccion de memoria &name_struct
entonces ella en la funcion que la recibe debe recibirse como su contenido *name_struct
para acceder a sus atributos se puede usar:
(*name_struct).attr, o , name_struct-->attr, que es igualment valido cuando se manejan structs
la directiva typedef, permite definir tipos de datos asi:
typedef char NAME[100];
typedef char EMAIL[100];
Una struct puede usarlos asi: NAME name, EMAIL email;
|| CONST ||
Es un modificador de tipo de dato, indica que el contenido de la variable no podrá ser sobreescrito,
pues es constante.
Este tipo de aclaración tiene especial relevancia cuando se trabaja con punteros.
Se trata de un mecanismo de seguridad, nos aseguramos de que nuestro programa no escribe donde no debe
Este tipo de seguridad se le conoce tambien como "principio de menor privilegio", en donde
no se le permite a modulos de software, tales como funciones, modificador
aspectos mas alla para lo que fueron creados.
|| PUNTEROS ||
Es una variable que en su contenido guarda la dirección de memoria de
otra variable. Por eso se dice que apunta o es puntera de una variable.
Los punteros no pueden contener numeros cualquiera, solo pueden contener
numeros que correspondan a direcciones de memoria.
int * pointer; --> Crea un puntero
*pointer --> con esto accedo al contenido de la direccion
de memoria a donde apunta el puntero
&number --> me da la direccion de memoria de una variable
|| PASAR VALORES POR ARGUMENTOS ||
Por valor: C crea una COPIA de la variable, y no altera la original
Por referencia: C hace uso de PUNTEROS, pasando como su nombre
lo indica: una referencia a la posición de memoria de la variable
que se maneja como argumento, permitiendo alterar su valor,
en esta forma el argumento se pasa junto a un *variable,
si pasamos &variable, estamos pasando es la direccion de memoria en byte
hexadecimal, y si solo pasamos la variable estamos pasando una copia
|| ARREGLOS ||
Todo arreglo es un puntero, pero no todo puntero es un arreglo.
|| CADENAS ||
-strcmp: compara dos cadenas pasadas por argumentos
Devuelve 0 si son iguales
1 si la segunda es mayor que la primera
-1 si la primera es mayor que la segunda
|| BIBLIOTECAS ||
Se crea un archivo .h (mylib.h, p ej). y un archivo .c usa los metodos de él y les da cuerpo
El archivo .h es como una interfaz y el .c es la que la implementa usando un #include
luego si otra clase quiere usar el metodo del archivo .c entonces debe #include el archivo .h
para compilar y enlazar todo se debe compilar el archivo que usa el metodo y la que lo implementa
para mi caso es: mylib_usage.c y mylib.c, juntas, la linea de compilacion seria asi:
gcc mylib_usage.c mylib.c -o mylib_usage, esto solo crea un archivo binario
|| RESERVA DE MEMORIA DINAMICA ||
*malloc y *realloc: interactuan con el S.O para reservar
memoria en posiciones continuas.
El NULL es igual al valor 0, !NULL es igual a 1, NULL en una lista es que no tiene ningun valor
|| LEER DE CONSOLA ||
char buffer [100];
scanf("%s", buffer);
Tambien se le puede especificar cuantos caracteres leer:
scanf("%99s", buffer); Puede leer 99 caracteres
void *malloc (size_t size): Asigna la memoria solicitada y retorna un puntero a esta o NULL si la solicitud falla.
void *realloc(void *ptr, size_t size): Intenta cambiar el tamaño del bloque de memoria al que apunta ptr que se asigno previamente,
es decir lo aumenta.
prt: es el puntero a un bloque de memoria previamente asignado con malloc, calloc o realloc para ser
reasignado. Si esto es NULL, se asigna un nuevo bloque y la funcion devuelve un puentero a él.
size_t: este es el numero tamaño para el bloque de memoria en bytes. si es 0 y ptr apunta a un bloque de memoria
existente, el bloque de memoria apuntado por ptr se desasigna y se devuleve un puntero NULL.
|| MATEMATICAS ||
Libreria matematica: math.h
sqrt() raiz cuadrada
pow(a, 2) potencia