指针变量 参数函数 值传递 “不能通过调用函数来改变实参指针变量的值,但可以改变实参指针所指变量的值”谭浩强的10.3 和10.4前面那个题 关于交换大小的调用函数是下面的{p=p1;p1=p2;p2=p;}
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/28 08:00:02
![指针变量 参数函数 值传递 “不能通过调用函数来改变实参指针变量的值,但可以改变实参指针所指变量的值”谭浩强的10.3 和10.4前面那个题 关于交换大小的调用函数是下面的{p=p1;p1=p2;p2=p;}](/uploads/image/z/2717334-54-4.jpg?t=%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F+%E5%8F%82%E6%95%B0%E5%87%BD%E6%95%B0+%E5%80%BC%E4%BC%A0%E9%80%92+%E2%80%9C%E4%B8%8D%E8%83%BD%E9%80%9A%E8%BF%87%E8%B0%83%E7%94%A8%E5%87%BD%E6%95%B0%E6%9D%A5%E6%94%B9%E5%8F%98%E5%AE%9E%E5%8F%82%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%2C%E4%BD%86%E5%8F%AF%E4%BB%A5%E6%94%B9%E5%8F%98%E5%AE%9E%E5%8F%82%E6%8C%87%E9%92%88%E6%89%80%E6%8C%87%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%E2%80%9D%E8%B0%AD%E6%B5%A9%E5%BC%BA%E7%9A%8410.3+%E5%92%8C10.4%E5%89%8D%E9%9D%A2%E9%82%A3%E4%B8%AA%E9%A2%98+%E5%85%B3%E4%BA%8E%E4%BA%A4%E6%8D%A2%E5%A4%A7%E5%B0%8F%E7%9A%84%E8%B0%83%E7%94%A8%E5%87%BD%E6%95%B0%E6%98%AF%E4%B8%8B%E9%9D%A2%E7%9A%84%7Bp%3Dp1%3Bp1%3Dp2%3Bp2%3Dp%3B%7D)
指针变量 参数函数 值传递 “不能通过调用函数来改变实参指针变量的值,但可以改变实参指针所指变量的值”谭浩强的10.3 和10.4前面那个题 关于交换大小的调用函数是下面的{p=p1;p1=p2;p2=p;}
指针变量 参数函数 值传递
“不能通过调用函数来改变实参指针变量的值,但可以改变实参指针所指变量的值”
谭浩强的10.3 和10.4前面那个题 关于交换大小的
调用函数是下面的
{p=p1;p1=p2;p2=p;} 还有{p=*p1;*p1=*p2;*p2=p;}这两种情况搞不清楚,
为什么用指针变量作为函数参数就可以?
不用指针变量,实参 值传递 的方式单向传到 形参,那么只改变调用函数里的值,没有回传到实参来,
那么,用了指针变量,值是怎么到实参来的?
指针变量 参数函数 值传递 “不能通过调用函数来改变实参指针变量的值,但可以改变实参指针所指变量的值”谭浩强的10.3 和10.4前面那个题 关于交换大小的调用函数是下面的{p=p1;p1=p2;p2=p;}
注意传递地址和传递变量的区别:
比如
void swap(int x,int y)
{
//...
}
...
int a=3,b=4;
swap(a,b);
此处将变量a的值3传递给x,b的值4传递给y,此后再swap函数中便与ab无关了,xy再怎么改变,ab都不会变的
其实传地址的道理是一样的,不过要区别的是:地址没变,地址里面的内容变了
比如
void swap(int *p1,int *p2)
{
*p1=5;*p2=6;
}
...
int a=3,b=4;
int *pa=&a,*pb=&b;
swap(pa,pb);
注意此处将ab的地址传递给了形参p1,p2,而在swap中是通过地址改变了参数的值,我们假定变量a在内存中的地址是2000,变量b在内存中的地址是3000,将2000和3000分别传递给p1,p2,然后*p1=5;通过p1指针内的地址改变了里面的值,也就是将内存地址2000里面的内容改为5,又将内存3000里面的内容改为了6,然后返回主函数后,这时pa,pb的指向并没有改变,pa仍指向a,pb仍指向b,但是ab里面的内容则发生了改变
这边再仔细推敲一下吧,