作业帮 > 综合 > 作业

指针变量 参数函数 值传递

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/05 20:39:24
指针变量 参数函数 值传递
“不能通过调用函数来改变实参指针变量的值,但可以改变实参指针所指变量的值”
谭浩强的10.3 和10.4前面那个题 关于交换大小的
调用函数是下面的
{p=p1;p1=p2;p2=p;} 还有{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里面的内容则发生了改变
这边再仔细推敲一下吧,