He estado programando c/C++ durante muchos años, pero el descubrimiento accidental de hoy me hizo algo curioso ... ¿Por qué ambas salidas producen el mismo resultado en el siguiente código? (arr
es por supuesto la dirección de arr[0]
, es decir, un puntero a arr[0]
lo que habría esperado &arr
ser la dirección de ese puntero, pero tiene el mismo valor que arr
.)¿Por qué arr y & arr son iguales?
int arr[3];
cout << arr << endl;
cout << &arr << endl;
Observación: Esta cuestión fue cerrado, pero ahora se abre de nuevo. (Gracias?)
sé que &arr[0]
y arr
evalúa al mismo número, pero que es no mi pregunta! La pregunta es por qué &arr
y arr
se evalúa con el mismo número. Si arr
es un literal (software no almacenado), entonces el compilador debe quejarse y decir que arr
no es un valor l. Si la dirección del arr
está almacenada en alguna parte, entonces &arr
debe darme la dirección de esa ubicación. (Pero este no es el caso)
si escribo
const int * arr2 = arr;
entonces arr2[i]==arr[i]
para cualquier entero i
, pero .
¿Qué significa "la dirección de ese puntero"? El puntero no está almacenado en una variable. –
@David Schwartz, si escribiera int * arr2 = new int [3], entonces & arr2 se habría almacenado en una variable. Quizás arr es una constante literal? Pero si uno toma la dirección de una constante (por ejemplo, & 123), entonces el compilador se queja (123 no es un valor l). El compilador no se quejó cuando tomé la dirección de arr. – ragnarius
¡No creo que sea un duplicado! – ragnarius