Dirección del array


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] deben tener el mismo valor, pero ¿cómo es que &t es también el mismo? ¿Qué significa &t?

Author: Kevin Reid, 2011-12-07

3 answers

Cuando t se usa por sí solo en la expresión, se realiza una conversión de matriz a puntero, esto produce un puntero al primer elemento de la matriz.

Cuando t se usa como argumento del operador &, no se realiza tal conversión. El & entonces 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 está en la misma posición en memoria que el inicio de toda la matriz, y así estos dos los punteros tienen el mismo valor.

 25
Author: Mankarse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-07 09:13:05

El tipo real de t es int[10], por lo que &t es la dirección de la matriz.
También, int[] convierte implícitamente a int*, así t convierte a la dirección de array el primer elemento de array.

 3
Author: Abyx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-05 08:06:35

No hay ninguna variable llamada t, ya que no se puede cambiar. El nombre t simplemente se refiere a la dirección del primer elemento (y también tiene un tamaño asociado con él). Por lo tanto, tomar la dirección de la dirección realmente no tiene sentido, y C "colapsa" en solo ser la dirección.

El mismo tipo de cosas sucede para 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 puede ser tomado.

 -2
Author: unwind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-07 09:07:46