Puntero colgante en C

Escribí un programa en C con puntero colgante.

#include<stdio.h>

int *func(void)
{
    int num;
    num = 100;
    return &num;
}

int func1(void)
{
    int x,y,z;
    scanf("%d %d",&y,&z);
    x=y+z;
    return x;
}

int main(void)
{
    int *a = func();
    int b;
    b = func1();
    printf("%d\n",*a);
    return 0;
}

Estoy obteniendo elsalida como 100 aunque el puntero esté colgando.

He realizado un solo cambio en la función anteriorfunc1(). En lugar de tomar el valor dey yz desde la entrada estándar como en el programa anterior, ahora estoy asignando el valor durante el tiempo de compilación.

I redefiní lafunc1() como sigue

int func1(void)
{
    int x,y,z;
    y=100;
    z=100;
    x=y+z;
    return x;
}

Ahora eloutput es 200.

¿Puede alguien explicarme el motivo de las dos salidas anteriores?

Respuestas a la pregunta(7)

Su respuesta a la pregunta