Problema con la statement de una matriz de punteros

Cuando ejecuto este codigo

#include int main() { int (*x)[5]; printf("\nx = %u\nx+1 = %u\n&x = %u\n&x + 1 = %u",x,x+1,&x,&x+1); } 

Esta es la salida en C o C ++:

 x = 134513520 x+1 = 134513540 &x = 3221191940 &x + 1 = 3221191944 

Por favor explique. También cual es la diferencia entre:

int x[5] e int (*x)[5] ?

  • int x[5] es una matriz de 5 enteros
  • int (*x)[5] es un puntero a una matriz de 5 enteros

Cuando incrementas un puntero, incrementas por el tamaño del apuntado al tipo. x+1 es, por lo tanto, 5*sizeof(int) bytes más grande que solo x , lo que da los valores hexadecimales 8048370 y 8048384 con una diferencia de 0x14 o 20.

&x es un puntero a un puntero, por lo que cuando lo incrementa, agrega bytes sizeof(a pointer) – esto da los valores hexadecimales bf9b08b4 y bf9b08b8 , con una diferencia de 4.

  1. int x[5] es una matriz de 5 pulgadas
  2. int (*x)[5] es un puntero a una matriz de 5 pulgadas
  3. int* x[5] es una matriz de 5 punteros a ints
 int (*x)[5]; 

Declara un puntero a una matriz.

Desde el título de la pregunta, probablemente quieras

 int* x[5]; 

en cambio, lo que declara una matriz de punteros.

 int x[5]; 

Declara un conjunto antiguo de int s.

 int x[5]; 

Declara una matriz de cinco ints.

 int (*x)[5]; 

declara un puntero a una matriz de 5 pulgadas.

Usted puede encontrar cdecl.org útil.