SAP: Punteros en ABAP

5

Click here to load reader

description

Tutorial sobre el concepto de puntero en programación y sobre el uso de los punteros en ABAP.

Transcript of SAP: Punteros en ABAP

Page 1: SAP: Punteros en ABAP

QUÉ ES UN PUNTERO

Un puntero es una variable que guarda la dirección en memoria de otra variable. Por eso decimos que un puntero apunta hacia esa segunda

variable.

Veamos un ejemplo:

En este caso tenemos dos variables, una variable llamada i y otra

variable llamada p.

Page 2: SAP: Punteros en ABAP

El sistema reserva en memoria 4 bytes para cada una de esas dos

variables.

La dirección de la variable i comienza en el byte 248.440 y ocupa los 4

bytes siguientes. La variable i ha sido definido como un número entero (int).

La dirección de la variable p comienza en el byte 248.444 y ocupa los 4 bytes siguientes. La variable p ha sido definida como un puntero.

La variable i contiene el equivalente binario al número cinco, es decir, el valor de cada uno de los 32 bits de esa variable es

00000000 00000000 00000000 00000101

La variable p contiene el equivalente binario al número 248.440, que corresponde a la dirección de memoria que el sistema asigna al primero

de los 4 bytes que ocupa la variable i.

No cofundir la dirección de p (248.444) con el contenido de p (la

dirección de i).

LOS PUNTEROS EN EL LENGUAJE C

El lenguaje de programación C es muy flexible y nos permite acceder y asignar cada uno de estos valores. Por ejemplo

si queremos asignar el valor 5 a la variable i

int i=5;

Page 3: SAP: Punteros en ABAP

si queremos crear un puntero que no contiene ninguna dirección

todavía

int *p=null;

si queremos crear un puntero p y asignarle la dirección de i

int *p=&i;

si queremos sumar 1 al contenido de i lo podemos hacer de tres

formas

i=i+1;

i++;

i=*p+1;

En este último caso *p indica el contenido de la variable a la que apunta p (es decir i). Recordemos que el valor de p es una dirección de

memoria.

ARITMÉTICA DE PUNTEROS

También podemos operar con el contenido de la variable p, es decir

podemos hacer que p apunte hacia otra dirección

bien asignándole otra dirección

p=&j;

Page 4: SAP: Punteros en ABAP

bien haciendo que apunte hacia la dirección que guarda otro

puntero

puntero1=puntero2;

bien moviendo el puntero p de cuatro en cuatro bytes (una variable de tipo int normalmente ocupa 4 bytes). Esto es lo que se

conoce como aritmética de punteros

p=p+1;

p++;

PUNTEROS EN SAP

En ABAP las direcciones de memoria se llaman reference.

Podemos crear una variable (puntero) que guarda la dirección de memoria (reference) de otra variable declarandola como tipo REF. Por

ejemplo, podemos declarar un puntero llamado p que de momento no guarda ninguna dirección en memoria, es decir no apunta hacia ninguna

variable

DATA p TYPE REF TO DATA.

Podemos asignar al puntero p la dirección de otra variable, digamos x

GET REFERENCE OF x INTO p.

Podemos asignar al puntero la dirección de la variable x a través de un

field_symbol, digamos <f>, que ya apunte a la variable x

GET REFERENCE OF <f> INTO p.

Page 5: SAP: Punteros en ABAP

Podemos asignar a un puntero la dirección de otro puntero mediante la instrucción MOVE o el símbolo =

MOVE puntero1 TO puntero2.

puntero1 = puntero2.

Podemos crear un puntero dinámicamente (en tiempo de ejecución)

primero declaramos el puntero vacío

DATA p TYPE REF TO DATA

luego creamos el puntero en tiempo de ejecución

CREATE DATA p TYPE i

CREATE DATA p LIKE variable

Para acceder al contenido de la variable hacia la que apunta p (dereference) utilizamos el símbolo ->*. En este ejemplo la variable y

ahora guarda el contenido de la variable hacia la que apunta p

ASSIGN p->* TO y