sap: punteros en abap
DESCRIPTION
Tutorial sobre el concepto de puntero en programación y sobre el uso de los punteros en ABAP.TRANSCRIPT
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.
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;
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;
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.
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