"Int * nums = {5, 2, 1, 4}" provoca un error de segmentación

int *nums = {5, 2, 1, 4};
printf("%d\n", nums[0]);

causa un defecto de seguridad, mientras que

int nums[] = {5, 2, 1, 4};
printf("%d\n", nums[0]);

no lo hace Ahora:

int *nums = {5, 2, 1, 4};
printf("%d\n", nums);

impresiones 5.

En base a esto, he conjeturado que la notación de inicialización de matriz, {}, carga ciegamente estos datos en cualquier variable que esté a la izquierda. Cuando es int [], la matriz se llena como se desee. Cuando es int *, el puntero se llena con 5, y las ubicaciones de memoria después de donde se almacena el puntero se llenan con 2, 1 y 4. Por lo tanto, nums [0] intenta eliminar 5, causando una falla por defecto.

Si me equivoco, corrígeme. Y si estoy en lo correcto, explique, porque no entiendo por qué los inicializadores de matriz funcionan de la manera en que lo hacen.

Respuestas a la pregunta(5)

Su respuesta a la pregunta