Diferencia entre variables estáticas, automáticas, globales y locales en el contexto de c y c ++

Tengo un poco de confusión sobrestatic, auto, global ylocal variables

En algún lugar leí que unstatic solo se puede acceder a la variable dentro de la función, pero todavía existen (permanecen en la memoria) después de que la función regresa.

Sin embargo, también sé que unlocal La variable también hace lo mismo, entonces ¿cuál es la diferencia?