#include
void interchange(int * u, int * v);
int main(void){
int x = 5, y = 10;
printf("Originally x = %d and y = %d.\n", x,
y);
interchange(&x,
&y); // send addresses to function
printf("Now x = %d and y = %d.\n", x,
y);
return 0;
}
void interchange(int * u, int * v)
{
int temp;
temp = *u; // temp gets value that u points
to
*u = *v;
*v = temp;
}
刚学习此节时,总是抓不住重点,今天忽然领悟到:
这首先要搞清函数作用域的问题。main函数调用interchange,interchange局部变量的所有操作,都是是interchange的stack
frame中,是不会到main函数中的变量中去的。如果这里我们不用函数interchange,而是直接用temp变量作为中介交换,是完全可以实现x与y数据交换的:
#include
int main(void){
int x=5,y=10;
printf("originally x=%d and y=%d.\n",x,y);
printf("originally
&x,&y=%x\t%x\n",&x,&y);
int temp=x;
x=y;
y=temp;
printf("now x=%d and y=%d.\n",x,y);
printf("now
&x,&y=%x\t%x\n",&x,&y);
return 0;
}
然后,我们回到主题,利用指针,在interchange函数内部就可以实现对main函数中变量的修改,充分说明了指针是对内存进行操作,证明了其优势所在。