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?
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.
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.
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.
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