El nombre de la matriz en C / C ++ se degenerará en un puntero, por lo que el nombre de la matriz realmente se refiere a la dirección del primer elemento de la matriz. El nombre de la matriz es especial como puntero. Está en el área de memoria a la que apunta. El valor de & a es el mismo que el valor de a (puede observar la salida), pero el tipo y el significado son diferentes. La operación de adición del puntero está estrechamente relacionada con el tipo de datos señalado.
Por ejemplo:
int a [10]; a es equivalente a int *, si le agrega 1 (a + 1), es equivalente a a + 1 * sizeof (int). Sin embargo, el tipo de & a es equivalente a int **, que es el llamado puntero a la matriz, y es un puntero secundario del tipo de elemento de matriz. Agregar 1 es equivalente a & a + 1 * sizeof (a), por lo que será compensado por una matriz Longitud.
Primero, un código muy simple:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int x=5,*p_int=&x;
int aa[10]={1,2,3,4,5,6,7,8,9,10};
cout<<"\naa:\t"<<aa<<"\naa+1:\t"<<aa+1;
cout<<"\n&aa:\t"<<&aa<<"\n&aa+1:\t"<<&aa+1<<"\n\n";
cout<<"\np_int:\t"<<p_int<<"\np_int+1:"<<p_int+1;
cout<<"\n&p_int:\t"<<&p_int<<"\n&p_int+1:"<<&p_int+1;
return 0;
}
El resultado de ejecución es:
aa: 0x6ffe00
aa + 1: 0x6ffe04
y aa: 0x6ffe00
y aa + 1: 0x6ffe28
p_int : 0x6ffe3c
p_int + 1: 0x6ffe40
& p_int : 0x6ffe30
& p_int + 1 : 0x6ffe38
Se concluye que:
① El nombre del conjunto es +1, que es el número de bytes en el tamaño del elemento del conjunto; la dirección del nombre del conjunto es +1, que es el número de bytes en todo el tamaño del conjunto
② El puntero +1 es el número de bytes correspondientes al tipo de puntero; puntero La dirección de S +1 es +8