Pregunta

Yo sé que los punteros almacenan la dirección del valor que apuntan a, pero si muestra el valor de un puntero directamente a la pantalla, se obtiene un número hexadecimal. Si el número es exactamente lo que las tiendas de puntero, a continuación, cuando se dice

pA = pB; //both are pointers

que está copiando la dirección. Entonces ¿no habría una sobrecarga más grande para el uso de punteros cuando se trabaja con artículos muy pequeños como ints y bools?

¿Fue útil?

Solución

Un puntero es esencialmente sólo un número. Almacena la dirección en la memoria RAM, donde los datos son. El puntero en sí es bastante pequeña (probablemente el mismo tamaño que un int en arquitecturas de 32 bits, long de 64 bits).

Usted está correcto sin embargo, que un int * no salvaría a cualquier espacio cuando se trabaja con ints. Pero eso no es el punto (sin doble sentido). Los punteros están allí para que pueda tener referencias a las cosas, no sólo tiene que utilizar los cosas a sí mismos.

Otros consejos

Las direcciones de memoria.

Es decir las ubicaciones en la memoria donde otras cosas es .

Punteros son generalmente el tamaño de la palabra del procesador, por lo que generalmente se pueden mover en un ciclo de instrucción individual. En resumen, son rápidos.

Como otros han dicho, un puntero almacena una dirección de memoria que es "sólo un número', sino que es una abstracción. Dependiendo de la arquitectura del procesador puede ser más de un número, por ejemplo, una base y desplazamiento que hay que añadir a dereference el puntero. En este caso la sobrecarga es ligeramente más alta que si la dirección es un solo número.

Sí, hay sobrecarga en el acceso a un int o un bool a través de un puntero vs directamente, en el que el procesador puede poner la variable en un registro. Punteros se utilizan por lo general cuando el valor de la indirección mayor que cualquier sobrecarga, es decir, que atraviesa una matriz.

he estado refiriendo a los gastos generales del tiempo. No estoy seguro si OP estaba más preocupado por el espacio o el tiempo encima.

El número se refiere a su dirección en la memoria. El tamaño de un puntero es típicamente el tamaño nativo de la arquitectura del ordenador de forma que no hay una sobrecarga adicional en comparación con cualquier otro tipo primitivo.

En algunas arquitecturas hay una sobrecarga adicional de punteros a caracteres porque la arquitectura sólo admite palabras de direccionamiento (valores de 32 o 64 bits). Por tanto, un puntero a un carácter se almacena como una dirección de palabra y un desplazamiento del personaje dentro de esa palabra. De las referencias del puntero consiste en ir a buscar la palabra y luego cambiando y enmascarar su valor para extraer el carácter.

Una dirección en la memoria. Puntos a alguna parte! : -)

Permítanme empezar desde lo básico. En primer lugar, usted tiene que saber qué variables son y cómo se utilizan.

Variables son básicamente las posiciones de memoria (por lo general contiene algunos valores) y que utilizan algún identificador (es decir, nombres de variables) para referirse a esa ubicación de memoria y utilizar el valor presente en esa ubicación.

Para entenderlo mejor, supongamos que queremos la información a partir de células de memoria presentes en algún lugar con respecto a la variable actual. Podemos utilizar el identificador para extraer información de las células cercanas? No. Debido a que el identificador (nombre de la variable) sólo dará el valor contenido en esa célula particular.

Pero, si de alguna manera podemos obtener la dirección de memoria en la que esta variable está presente, entonces podemos mover a lugares cercanos y utilizar su información, así (en tiempo de ejecución).

Aquí es donde entran en juego los punteros. Se utilizan para almacenar la ubicación de esa variable de manera que podemos utilizar la información de dirección adicional cuando sea necesario.

Sintaxis:. Para almacenar la dirección de una variable simplemente podemos usar & operador (dirección de)

foo = &bar 

Aquí foo almacena la dirección de la barra variable.

Ahora, lo que si queremos conocer el valor presente en esa dirección?

Para ello, podemos utilizar simplemente el operador * (desreferenciar) .

value = *foo

Ahora que tenemos para almacenar la dirección de una variable, estaremos necesitando la memoria de la misma manera que necesitamos en el caso de una variable. Esto significa punteros también se almacenan en la memoria de la misma manera que otras variables, por lo que al igual que en el caso de las variables, también podemos almacenar la dirección de un puntero en otro puntero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top