Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comunicaciones
Repaso C/C++
Arrays, Cadenas,
Estructuras y Punteros
Cadenas
Bibliotecas de funciones
Estructuras
Punteros
Memoria dinmica
Argumentos a funciones
Constantes
Punteros y arrays
Punteros a funciones
Inicializacin
o tipo nombre[] = {const, const, .. const};
o NOTA: la asignacin de arrays completos es ilegal
char array1[50];
char array2[50];
array1 = array2; //ERROR (se ver la causa ms adelante)
Acceso a un elemento
o nombre[ndice]
Donde ndice est entre [0 , tamao 1]
i=0;
while ( (i < 10) && ( arr[i++] != in) );
if ( i == 10 )
std::cout << "El numero " << in << "no esta en el array" << endl;
else
std::cout << "El numero " << in << "esta en la posicion " << i-1 <<
endl;
return 0;
}
4
Arrays en C++ y en C
C++:
#include <tr1/array>
std::tr1::array<int, 50> mi_array;
mi_array[0] = 0;
mi_array.size();
C:
int mi_array[50] = {1,2,3}; //este tiene 50 elementos, pero 3 en uso
int mi_array2[] = {1,2,3}; //este tiene solo 3 elementos
typedef int TipoArray[5];
TipoArray mi_array3;
mi_array[0] = 0;
//NO es posible consultar el tamao de un array en C (lo cual es peligroso)
u n a c o n s t a n t e \0
Inicializacin:
char cadena[] = {u, n, o, \0};
char cadena2[] = "uno"; //el compilador pone el '\0'
i = 0;
while((destino[i] = origen[i]) != '\0'){
++i;
}
}
8
Cadenas en C++ y en C
C++: mtodo C++ funcin C
#include <string> string::length strlen
std::string s("hola");
string::assign strcpy
s.length();
string::copy strcpy
C: string::append strcat
#include <string.h> string::compare strcmp
char s[50] = "hola"; string::find strstr
char s2[] = "hola";
... ...
char s3[50] = {'h','o','l','a','\0'};
strlen(s);
10
11
Consulta rpida: http://www.cplusplus.com/reference/clibrary/cstring/
12
Consulta rpida: http://www.cplusplus.com/reference/clibrary/cstdlib/
Bibliotecas (III)
C++: #include <cctype>
C: #include <ctype.h>
Esta cabecera declara un conjunto de funciones para
clasificar y transformar caracteres individuales
Funciones:
o iscntrl
o isspace
o isupper
o islower
o isalpha
o isdigit
o isxdigit
o isalnum
o ispunct
o isgraph
o isprint
13
Consulta rpida: http://www.cplusplus.com/reference/clibrary/cctype/
permisos.lectura = 0;
permisos.escritura = 1;
sizeof(Permisos) ? NO puede ser 3 bits!
15
int x = 10;
int *p; p
p = &x; 10 x
int x = 10;
int *p; p
p = &x; 20 x
*p = 20;
int x = 10;
int *p;
*p = 20;
Es el operador desreferencia,
que obtiene el valor apuntado por p
19
En versin array:
delete[] p;
21
22
struct MisDatos{
int dato1;
int dato2;
};
// Acceso a campos:
(*p).dato1 = 5;
// Es equivalente a:
p->dato1 = 5;
23
En el Heap / En la Pila /
Reserva dinmica Reserva automtica
25
Qu pasa con x?
Qu pasa con y?
26
27
28
Argumentos pasados por direccin
void cuadrado(int * i)
{
*i = (*i)*(*i); /* el i de esta funcion
es un puntero a la variable que le pasen
como argumento */
}
int main()
{
int x = 5;
cuadrado(&x);
cout << x << endl; //resultado: 25
return 0;
}
29
33
34
35
#include <iostream>
int main () {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
std::cout << numbers[n] << ", ";
return 0;
}
36
Punteros a funciones
Una funcin C no es una variable, pero
Se puede apuntar a la memoria donde comienza un
segmento de cdigo (funcin)
Se puede usar el puntero como el de una variable
37
Ejemplo:
int f(){
return 0;
}
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
Ms en:
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
39