1
« en: Sábado 31 de Agosto de 2013, 06:39 »
Hola, buen dia, tengo duda en este ejercicio basico de punteros que se suele poner en algunos libros como una introduccion a los punteros y al paso por rereferencia. Mi duda no es el programa en si, digamos que mas o menos lo entiendo lo que no alcanzo a comprender del todo, es el papel que juegan los punteros para realizar esta accion. El programa consiste en intercambiar dos valores de dos variables. El programa es el siguiente:
#include <stdio.h>
void change ( int *x, int *y);
void main(void){
int a = 5, b = 10;
printf("a = %d b = %d\n", a,b);
change(&a,&b);
printf("a = %d b = %d\n", a,b);
}
void change( int *x, int *y){
int z;
z = *x;
*x = *y;
*y = z;
}
Ademas, ya que el paso por referencia consiste en copiar las lvalue(direcciones de memoria de la variable) a la pila(stack), ¿porque al declarar las variables "a" y "b" como globales en lugar de locales(como estan el programa), se siguen intercambiando los valores?, ya que se supone que al no ser variables locales, estas no se almacenan en la pila y por lo tanto el paso por referencia no se logra.
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.
#include <stdio.h>
void change ( int x, int y);
void main(void){
int a = 5, b = 10;
printf("a = %d b = %d\n", a,b);
change(a,b);
printf("a = %d b = %d\n", a,b);
}
void change( int x, int y){
int z;
z = x;
x = y;
y = z;
}
El IDE que utilice fue el codeblocks.
Agradecia mucho cualquier ayuda, tips, recomendaciones, etc.