c++ - ejemplos - awk file example
Direccion de matriz (3)
int t[10];
int * u = t;
cout << t << " " << &t << endl;
cout << u << " " << &u << endl;
salida:
0045FB88 0045FB88
0045FB88 0045FB7C
La salida para u
tiene sentido.
Entiendo que t
y &t[0]
deberían tener el mismo valor, pero ¿por qué &t
también es el mismo? ¿Qué significa & t realmente?
Cuando t
se usa solo en la expresión, tiene lugar una conversión de matriz a puntero, esto produce un puntero al primer elemento de la matriz.
Cuando t
se usa como el argumento del operador &
, no se lleva a cabo tal conversión. El &
luego toma explícitamente la dirección de t
(la matriz). &t
es un puntero a la matriz como un todo.
El primer elemento de la matriz se encuentra en la misma posición en la memoria que el inicio de toda la matriz, por lo que estos dos punteros tienen el mismo valor.
El tipo real de t
es int[10]
, por lo que &t
es la dirección de la matriz.
Además, int[]
convierte implícitamente a int*
, por lo que t
convierte a la dirección de la matriz el primer elemento de la matriz.
No hay una variable llamada t
, ya que no puedes cambiarla. El nombre t
simplemente se refiere a la dirección del primer elemento (y también tiene un tamaño asociado). Por lo tanto, tomar la dirección de la dirección realmente no tiene sentido, y C la "colapsa" en solo ser la dirección.
Lo mismo sucede con el caso de las funciones:
int foo(void)
{
return 12;
}
printf("%p and %p/n", (void *) foo, (void *) &foo);
Esto debería imprimir lo mismo, ya que no hay ninguna variable que contenga la dirección de foo
, cuya dirección a su vez se puede tomar.