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.
int x[5]
es una matriz de 5 pulgadas int (*x)[5]
es un puntero a una matriz de 5 pulgadas 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.