"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.