level 7
void swap(int i,int j)
{
int t;
t=i;
i=j;
j=t;
}
就是这个调用函数
int main()
{
int a,b;
swap(a,b);//我的疑问在这一步
return 0;
}
这一步系统到底做了什么。
形参和实参的概念我看过,出现这种语句我也能看出错误,但是我觉得我还没有完全理解,求大神给个形象的解释。
就是那一步,系统到底干了什么。
2014年07月05日 12点07分
1
level 14
打个比方,你从我这抄作业,抄完一看,有两道题写的时候写反了,就自己改了下。但你没告诉我,我这就还是错的。
2014年07月05日 12点07分
2
也就是说,调用函数执行的第一步是a、b的值赋给i、j,但是a、b本身并没有改变,是吗? 如果定义调用函数的时候改成void swap(int &i,int &j)的话,又该怎么理解呢
2014年07月05日 13点07分
是不是这个时候交换i和j就等于交换a和b的地址,也就相当于交换a和b的值了?
2014年07月05日 13点07分
回复 莫戾s :int &i是c++里的,这种方法使得i就是a的别名
2014年07月05日 13点07分
level 13
从实参到形参就是相当于赋值
swap(a,b);到void swap(int i,int j) 就是i=a,j=b; 即把a的值赋给i,但变量a不是变量i
2014年07月05日 13点07分
3
level 10
swap(a,b)
此时可以认为系统执行了这样的语句:i=a;j=b;
把a的值赋给j,b的值赋给j,调用swap()后i,j的值互换,但a,b的值不变。就好像是:你有一本《c语言程序设计》(a,b),你的朋友从你这复制了一份(i=a;j=b),但他觉得书写得不好,于是进行更改(t=i;i=j;j=t;),但你的书不会变(a,b)
2014年07月05日 18点07分
5
level 13
是这样,其它环境我不知道,在linux内核中,假设我内核写了这个函数,调用时swap(a,b),变量a和b会存储到寄存器a0和a1 ,你交换后,寄存器的值互换,函数结束后寄存器的值销毁,我感觉和栈内存一样。你用指针,虽然指针也放在寄存器中,但是指针所指向的内存还是原来的那块内存,直接改掉内存中的值,那么我函数结束只是销毁寄存器中的地址值,但地址所指向的值已经被改变。
2014年07月05日 23点07分
6