Ahora bien, no entiendo por qué un & y un retorno al mismo valor, lo que es el razonamiento
a
es el nombre de la matriz que se desintegra a puntero al primer elemento de la matriz . &a
no es más que la dirección de la matriz en sí, aunque a
y &a
imprimen el mismo valor, sus tipos son diferentes.
¿Cuál es también el tipo de & a?
puntero a una matriz que contiene tres int
s, es decir int (*)[3]
podía i también hacer & (& a)?
No, la dirección del operador requiere que su operando sea un valor l. Un nombre de matriz es un lvalue no modificable por lo que &a
es legal, pero &(&a)
no lo es.
Tipo de impresión de &a
(C++ Sólo)
#include <typeinfo>
#include <iostream>
int main()
{
int a[]={1,2,3};
std::cout<< typeid(&a).name();
}
PS:
Uso %p
especificador de formato para la impresión de la dirección (usando especificador de formato incorrecto en printf
invoca un comportamiento indefinido)
pero no entiendo cómo y a es int (*) [3], quiero decir que no es que lo hayamos declarado en ninguna parte para ser de este tipo . – n0nChun
@ n0nChun: Edité mi publicación. :) –
Sí, pero ¿por qué iba a usar C++ para decirme el tipo si estoy trabajando en C. ¿No hay alguna otra razón por la cual el tipo es int (*) [3]? ¿O es algo que simplemente tiene sentido, pensar en ello de manera lógica? – n0nChun