¿Cómo funcionan los operadores de dirección en c ++

Video: Curso de C - Operadores a nivel de bit

Como dice el dicho, “Todo el mundo tiene que estar en alguna parte.” Cada variable de C ++ se almacena en algún lugar de la memoria del ordenador. La memoria se divide en bytes individuales, con cada byte llevar su propia dirección el número 0, 1, 2, y así sucesivamente.

Video: Desarrollando en C — 15. Operadores de bit

Una variable intReader podría ser en la dirección 0x100, mientras floatReader podría haber pasado en la ubicación 0x180. (Por convención, las direcciones de memoria se expresan en hexadecimal). Por supuesto, intReader y floatReader podría estar en otro lugar en la memoria por completo - sólo el equipo sabe a ciencia cierta, y sólo en el momento en que se ejecuta el programa.

Esto es algo análogo a un hotel. Cuando realice su reserva, se le puede asignar sala de 0x100. Su compañero se le puede asignar 80 puertas más abajo en la sala de 0x180. Cada variable se le asigna una dirección cuando se crea.

Los dos operadores relacionados con el puntero se muestran en esta tabla. los & operador dice “dígame su dirección”, y * dice que “el valor en la siguiente dirección.”

Los operadores de puntero
OperadorSentido
& (Unario)(En una expresión) la dirección de
& (Unario)(En una declaración) referencia a
* (Unario)(En una expresión) lo apuntado por
* (Unario)(En una declaración) puntero a

Estos no deben confundirse con el binario & y * los operadores.

Video: Curso de punteros en C y C++, puntero es la variable que contiene la dirección de otra variable

El seguimiento Diseño programa demuestra cómo el & operador puede utilizar para mostrar la disposición de las variables en la memoria:

// Disposición - este programa trata de dar al lector una idea // de la disposición de la memoria // local en sus compilador # include #incluir #incluir el uso de espacio de nombres principal (int nNumberofArgs, char * pszArgs []) {int puesta en intn- longl- largo tiempo ll-f- flotador doble de largo doble extremo ld-int d- std-int - // establecer la salida a modecout.setf hexagonal (ios :: hex) -cout.unsetf (ios :: dec) - // salida de la dirección de cada // variable para tener una idea de cómo las variables se // dispuestas en memorycout lt; lt; "--- = " lt; lt; &comienzo lt; lt; endl-cout lt; lt; "&n = " lt; lt; &norte lt; lt; endl-cout lt; lt; "&l = " lt; lt; &l lt; lt; endl-cout lt; lt; "&ll = " lt; lt; &TLBI; lt; endl-cout lt; lt; "&f = " lt; lt; &F lt; lt; endl-cout lt; lt; "&d = " lt; lt; &re lt; lt; endl-cout lt; lt; "&LD = " lt; lt; &THDV; lt; endl-cout lt; lt; "--- = " lt; lt; &fin lt; lt; endl - // espera hasta que el usuario esté listo antes de la terminación del programa // para permitir al usuario ver el programa resultscout lt; lt; "Pulse Intro para continuar ..." lt; lt; endl-cin.ignore (10, `n`) - cin.get () - volver 0-}

El programa declara un conjunto de variables de diferentes tipos. A continuación, aplica el & operador a cada uno para averiguar su dirección. Los resultados de una ejecución de este programa con Code :: Blocks aparecen como sigue:

--- = 0x28fefc&n = 0x28fef8&l = 0x28fef4&ll = 0x28fee8&f = 0x28fee4&d = 0x28fed8&LD = --- = 0x28fec0 0x28febcPress Intro para continuar ...

Sus resultados pueden variar. La dirección absoluta de las variables del programa depende de muchos factores. El estándar de C ++ desde luego no especifica cómo las variables han de ser presentado en la memoria.

Observe cómo la variable norte es exactamente 4 bytes de la primera variable declarada (comienzo), que se corresponde con el tamaño de un int (4 bytes). Del mismo modo, la variable l aparece 4 bytes abajo de eso, que es también el tamaño de una largo.

sin embargo, el flotador variable F es un total de 12 bytes desde su variable vecina re (0x28fee4 - 0x28fed8 = 0x000c). Eso es mucho más que los 4 bytes necesarios para una flotador.

Video: Tutorial de C++ en Español -18- Operadores de Incremento y Decremento

No hay ningún requisito que el C ++ las variables de carga en la memoria del compilador, sin espacios entre ellos. De hecho, a menudo se ve estas lagunas en la memoria cuando se mezclan las variables de diferente tamaño.

El Code :: Blocks / compilador gcc podría almacenar variables para su propio uso en entre sus variables. O, más probablemente, una peculiaridad en la manera en que se colocan las variables en la memoria está causando el compilador que perder una pequeña cantidad de espacio.

Artículos Relacionados