¿Cuál es la diferencia entre sizeof (x) y sizeof (p_x)

¿Puede decirme cuál es la diferencia entre sizeof(x) y sizeof(p_x) en el código siguiente?

 int x[10], *p_x; p_x = (int*)malloc(10 * sizeof(int)); 

 sizeof(x) 

está dando el número de bytes utilizados por la matriz x .

 sizeof(p_x) 

está dando el número de bytes utilizados por un puntero.

 #include int main() { int x[10], *p_x; printf ("%lu %lu\n", (unsigned long)sizeof(x), (unsigned long)sizeof(p_x)); return 0; } 

Salida del progtwig:

 40 4 

Mi MSVC usa punteros de 32 bits y entradas de 32 bits.

EDITAR formato de número mejorado siguiendo comentarios a continuación, gracias.

 sizeof(x) 

es el tamaño de un objeto de matriz. Su valor es 10 * sizeof (int) .

 sizeof(p_x) 

es el tamaño de un objeto puntero. Su valor es sizeof (int *) .

sizeof (x) devuelve el tamaño de su matriz en bytes (10 * sizeof (int), sizeof int es 4 bytes), mientras que sizeof (p_x) devuelve el tamaño de un puntero. Si está utilizando una máquina de 64 bits, eso es 8 bytes, si es una máquina de 32 bits, sus 4 bytes.