指针变量 参数函数 值传递
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/05 20:39:24
指针变量 参数函数 值传递
“不能通过调用函数来改变实参指针变量的值,但可以改变实参指针所指变量的值”
谭浩强的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;} 还有{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里面的内容则发生了改变
这边再仔细推敲一下吧,
比如
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里面的内容则发生了改变
这边再仔细推敲一下吧,
指针变量 参数函数 值传递
函数的参数传递有三种方式,1)按值传递,2)以指针方式传递,3)以引用方式传递.编写一个函数交换两个变量的值为例,验证是
c语言 指针作为函数参数传递时属于值传递还是地址传递
编写函数有10个数围成一圈,求出相邻三个数之和的最小值并返回最小值的起始数组元素的下标(用指针变量做函数参数传递最小的值
为什么要把指向指针的指针作为函数的参数传递?
编写用指针变量作为函数参数求数组的最小值、最大值和平均值的函数
matlab 函数参数传递
C语言中向一个函数传递一个数组,函数中定义一个指针变量,请问这个指针变量在for循环中要怎么使用?
函数参数传递什么意思
使用指向变量的指针变量做函数参数,编写函数求两个数的大于、小于、等于关系.(c语言编程)
使用指向变量的指针变量做函数参数,编写函数求两个数的平方,立方和及平方,立方差.
“指针变量作为函数参数的作用:将一个变量的地址传送到另一个函数中”这句话怎么理解?