¿Debe una función acceder a variables de fuera de la función?
NO DEBE HACERLO. SOLO SI SE LE PASA COMO PARÁMETROS
Esto se utiliza cuando pasas una variable como referencia, pasas una referencia como parámetro a la función y esta puede modificar su valor.
Ejemplo:
void algo(int *a) {
*a = 2;
}
int main(void)
{
int x = 10;
algo(&x);
return 0;
}
Dentro de la función algo, modificamos el valor de la variable x dentro de main, ya que le estamos pasando a la función una referencia, así esta puede modificar libremente su valor, ya que conoce la dirección de memoria.
¿Se puede acceder desde fuera de una función a una variable definida dentro?
NO
No se puede, ya que una variable definida dentro de una función, es local en esa misma función, es decir, solo tiene validez dentro de la función, por lo cual no podemos acceder a su valor desde afuera.
Ejemplo, es incorrecto suponer esto:
void algo(void) {
int x = 345;
}
int main(void)
{
algo();
/* x no existe dentro de la función main() */
return 0;
}
¿Se puede acceder desde dentro de una función a una variable definida fuera?
SI, AUNQUE HAY QUE EVITARLO EN LA MEDIDA DE LO POSIBLE
Ahí está hablando implícitamente de VARIABLES GLOBALES, trabajar mucho con variables globales, no es una buena práctica de ingeniería de software.
Te cito de la wikipedia:
El uso de este tipo de variables suele considerarse como una mala práctica, por el riesgo que conlleva esa deslocalización: una variable global puede ser modificada en cualquier parte del programa (a menos que resida en una sección de memoria protegida) y cualquier parte del programa depende de ella. Es por ello que una variable global tiene un potencial ilimitado para crear dependencias, factor éste que aumenta la complejidad. Sin embargo, en algunas ocasiones, las variables globales resultan muy útiles. Por ejemplo, se pueden usar para evitar tener que pasar variables usadas muy frecuentemente de forma continua entre diferentes subrutinas.
Saludos.