¿porque al declarar las variables "a" y "b" como globales en lugar de locales(como estan el programa), se siguen intercambiando los valores?
Al hacer la prueba de escritorio, puedo entender perfectamente el programa, lo que no entiendo es ¿porque al no usar punteros no se realiza el intercambio de los datos de la variables?. Este el programa sin punteros, el cual al realizar la prueba de escritorio, me resulta que dichos valores si deberian de ser cambiados.
void change( int *x, int *y){ int z; printf("Direccion:%d, Valor:%d\n", x, *x); printf("Direccion:%d, Valor:%d\n", y, *y); z = *x; *x = *y; *y = z;}
las variables a y b al ser locales se almacenan en la pila, es decir sus direcciones 1000 y 1001 se encuentran en la pila ¿porque estas variables no se limpian al salir, si tambien forman parte de la pila?
Otra cosa, mi duda respecto al uso de variables globales en lugar de locales, me referia a quiar las variables locales int a = 5 y int b = 10 y declararlas como globales antes del main. Al hacer esto se sigue realizando la misma accion, es decir las variables a y b se intercambian, y es donde surge mi duda que nose porque se realiza esto, ya que al ser variables globales estas no se almacenan en la pila, entonces ¿como se da el paso por referencia en este caso?
#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#define PI 3.14int a, b;// Esta funcion usa parametros sin apuntadores, las variables globales no cambiaran// Porque internamente a y b se copian a "x" y "y", aunque a y b sean globalesvoid change1(int x, int y){ int z; z = x; x = y; y = z;}// Esta funcion no usa parametros, usa directamente las variables globales, por lo tanto// los valores si se intercambiaranvoid change2(){ int z; z = a; a = b; b = z;}int main (void){ a = 5, b = 10; printf("a = %d b = %d\n", a,b); change1(a,b); printf("a = %d b = %d\n", a,b); change2(); printf("a = %d b = %d\n", a,b); return 0;}