Diferencia entre el nombre de matriz +1 y la dirección de nombre de matriz +1 en C ++

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
 

42 artículos originales publicados · Me gusta 10 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/qq_37659294/article/details/102331098
Recomendado
Clasificación