Sie sind auf Seite 1von 13

Punteros

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE INGENIERA INDUSTRIAL Y DE
SISTEMAS
Ing. Roy Palacios

1
Direcciones de Memoria

Al declarar una variable, la computadora realiza una reserva de memoria.

2
Direcciones de Memoria

Al asignar valores a las variables, la computadora almacena el valor en la


direccin de memoria que fue previamente reservada. 3
Punteros
Los punteros son variables que almacenan direcciones de memoria. Se
declaran mediante el operador *, mientras que mediante el operador & se
puede hallar la direccin de memoria de una variable.

int x;
x = 3;

int* y;
y = &x;

4
Ejemplo: Obteniendo la direccin de
una variable
#include <iostream>

using namespace std;

int main()
{
int x;
x = 3;

int* y;
y = &x;

cout << "Valor de variable : int x = " << x << endl;


cout << "Tamanio de variable " << sizeof(x) << " bytes = " << sizeof(x) * 8 << " bits " << endl;
cout << endl;

cout << "Direccion : " << y << " = " << (long long)(y) << endl;
cout << "Tamanio de direccion : " << sizeof(y) << " bytes = " << sizeof(y) * 8 << " bits " <<endl;

return 0;
}

5
Operadores
Operador &
#include <iostream>
El operador de
using namespace std;
direccin (&) retorna la
int main()
direccin (o puntero) {
/* Declaracion de variable entera */
int x = 3;

Declaracin de /* Declaracion de puntero a variable entera (almacenando la direccion) */


int* x_ptr = &x;
puntero (tipo*)
/* Asignacion mediante puntero */
Ejemplo: int*, char* *x_ptr = 5;

/* Nuevo valor */
cout << x << endl;

return 0;
Operador * }
El operador de
indireccin (*) retorna
el valor

6
int x = 3, y = 2;

int* ptr = &x;


int* ptr2 = ptr;

Es posible que muchos punteros apunten hacia la misma variable.

7
int x = 3, y = 2;

int* ptr = &x;


int* ptr2 = ptr;

*ptr = 7; // x = 7

Ahora la variable x toma el valor de 7, a travs del puntero ptr.

8
int x = 3, y = 2;

int* ptr = &x;


int* ptr2 = ptr;

*ptr = 7; // x = 7
*ptr2 = *ptr2 + 1 // x = 8

La variable x toma el valor de 8, a travs del puntero ptr2.

9
int x = 3, y = 2;

int* ptr = &x;


int* ptr2 = ptr;

*ptr = 7; // x = 7
*ptr2 = *ptr2 + 1 // x = 8

ptr = &y;

*ptr2 = 10 // x = 10;

El puntero ptr ahora apunta hacia la variable y. Luego, hacemos


que x tome el valor de 10 mediante ptr2.

10
Punteros y Arreglos: Aritmtica de Punteros

int arr[3] = {1, 2, 5}; p = p + 1;


int* p = arr; *p = 3;

Al asignar un arreglo a un Al incrementar el puntero, se


puntero, el puntero apunta apunta al siguiente elemento, es
hacia el primer elemento del decir, se avanza 4 bytes en el
arreglo. caso de enteros de 32 bits.
11
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/pointer.html
Punteros y Arreglos: Aritmtica de Punteros
Consideremos las siguientes declaraciones:
int arr[3]; short arr[6];

Entonces:
arr -> puntero a arr[0] arr -> puntero a arr[0]
arr + i -> puntero a arr[i] arr + i -> puntero a arr[i]
avanza de 4 bytes por elemento avanza 2 bytes por elemento
(sizeof(int) = 4) (sizeof(int) = 2)

direccin direccin

12
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/pointer.html
Ejemplo: Validar palindromos
#include <iostream>
#include <cstring>

using namespace std;

bool palindromo(char s[]) {


char* ptr_inicio = s;
char* ptr_fin = s + strlen(s) - 1;
while(ptr_inicio < ptr_fin) {
if(*ptr_inicio != *ptr_fin)
return false;

ptr_inicio++;
ptr_fin--;
}
return true;
}

int main() {

char s[] = "alohola";


if(palindromo(s)) cout<<s<<" es palindromo."<<endl;
else cout<<s<<" no es palindromo."<<endl;

return 0;
}

13

Das könnte Ihnen auch gefallen