c语言中实现“交换两个整型变量的值“的函数
函数形参与实参在内存中的处理;
void exchange (int int)
void exchange (int one ,int another){
int temp;
temp=one ;
one=another;
another=temp;
}
int main()
{
int num1;
int num2;
scanf("%d%d",&num1,&num2);
exchange(num1,num2);
printf("num1=%d,num2=%d",num1,num2);
}
对于这个结果是没有实现交换,操作系统内存管理角度的“系统堆栈”决定。对于调用函数时,系统会分配一个数据域的栈用来保存该段程序的数据,上例中,首先分配空间给num1,num2,栈顶指针向上移动8个字节,调用函数时从右向左首先进行对主函数的保护现场,分配4 个字节来保存其指针,然后向栈分配one,another,空间,在执行子函数时相当于改变在栈内申请的one 和another,即仅仅交换了one和another,子函数执行完释放形参指针变量,栈顶指针向下移动8个字节,在去继续执行主函数接下来的程序。所以num1和num2在调用函数里就没有发生改变。
因此,当我们需要改变主函数变量的值时,需要传的是变量的地址,通过指针来进行访问主函数里的变量,从而进行更改。
void realexchange(&num1,&num2)
void realexchange (int *one ,int*another )
{
int temp;
temp=*one;
*one=*another;
*another=temp;
}
此时栈顶指针向上偏移8个字节分别保存了num1num2的地址,*one和*another分别两条指针指向num1和num2的单元,然后交换完成,形参指针释放,栈顶指针向下移动8字节,此时num1和num2的值已经改变。
所以当我们需要改变主函数里变量的值时,必须要传变量的地址值。