¿Se puede asignar un puntero a un valor en la declaración? Algo como esto:Inicializando punteros en C++
int * p = &(1000)
¿Se puede asignar un puntero a un valor en la declaración? Algo como esto:Inicializando punteros en C++
int * p = &(1000)
Sí, puede inicializar punteros a un valor en la declaración, sin embargo no se puede hacer:
int *p = &(1000);
& es la dirección de operador y no se puede aplicar eso a una constante (aunque si pudiera, eso sería interesante). Intente utilizar otra variable:
int foo = 1000;
int *p = &foo;
o el tipo de fundición:
int *p = (int *)(1000); // or reinterpret_cast<>/static_cast<>/etc
¿Las constantes de cadena son un caso especial? Aunque eso tendría que ser un "const char *" ... – dmckee
Sí, los literales de cadena son especiales en que son expresiones lvalue, refiriéndose a un objeto de matriz (no a un puntero). Entonces puedes hacer 'char const (* p) [3] = &"01";' No menos interesante es inicializar una const * como esta: 'char const * p = & "hello there" [0];' –
no funciona, lo intenté, pero muestra algún valor de tipo de basura. ** 'int * p = (int *) 100;' **. entonces la salida es algo así como ** '000003E8' ** – Ravi
Um. No creo que puedas tomar una dirección no constante de una constante como esa.
pero esto funciona:
int x = 3;
int *px = &x;
cout << *px; // prints 3
o esto:
const int x = 3;
const int *px = &x;
const int *pfoo = reinterpret_cast<const int*>(47);
¿Qué hay de:
// Creates a pointer p to an integer initialized with value 1000.
int * p = new int(1000);
probado y funciona. ;-)
¡Pero no olvides eliminarlo! – GManNickG
Hay dos cosas que no están claras en la pregunta para mí. ¿Desea establecer el puntero a un valor específico (es decir, la dirección), o desea hacer que el puntero apunte a alguna variable específica?
En este último caso, puede utilizar simplemente el operador de dirección de. El valor del puntero se establece en la dirección de some_int_variable
.
int *p = &some_int_variable;
*p = 10; // same as some_int_variable = 10;
Nota: Lo que sigue es cambiar el mal del valor del puntero de forma manual. Si no sabe si quiere hacer eso, no quiere hacerlo.
En el primer caso (ajuste es decir a algunos, dirección específica dada), no se puede simplemente hacer
int *p = 1000;
Dado que el compilador no se llevará a la int e interpretarlo como una dirección. Tendrá que indicar al compilador que debe hacerlo de forma explícita:
int *p = reinterpret_cast<int*>(1000);
Ahora, el puntero hará referencia a algún entero (con suerte) en la dirección 1000. Tenga en cuenta que el resultado es definido por la implementación. Pero, sin embargo, esa es la semántica y esa es la forma en que le cuentas al compilador al respecto.
actualización: El Comité fija el comportamiento extraño de reinterpret_cast<T*>(0)
que fue sugerido por una nota y para el que he proporcionado una solución antes. See here.
¿Está tratando de establecerlo en una dirección absoluta, es decir, en un sistema integrado?Hace una gran diferencia en la respuesta. –
De hecho, es difícil adivinar lo que estás buscando ... Supongo que eres nuevo en los indicadores y confundes los términos verbales, bueno ... Todo el mundo tiene que empezar en alguna parte. :-) –