Al ternimar una función, todas sus variables locales "dejan de existir".
Si quieres que siga existiendo siempre (dentro de la función), las puedes declarar como static:
int nextValue(){
static int n = 0;
return n++;
}
Cada llamada sucesiva a la función, incrementará ese n.
Con respecto a los arrays, el funcionamiento es el mismo. Arrays, que no punteros apuntandoa memoria dinámica.