函数的地址传递是不是地址改变了但是值不会变
发布网友
发布时间:2023-07-26 19:39
我来回答
共3个回答
热心网友
时间:2024-11-28 19:00
#include<stdio.h>
int *f(int *p);
main()
{
int a[5]={1,2,3,4,5},*r=a;
r=f(r);
printf("%d\n",*r);
}
int *f(int *p)
{
p=p+3;
printf("%d,",*p);
return p;
}
地址改变的话值一定会改变,因为指针指向的存储位置改变了,相应的值也会改变,
而输出4,1的原因是你的函数并没有改变r的指向追问为什么没改变R指向呢
追答你的函数没有返回值,p=p+3;只是在函数体内部有用,一跳出函数就失效了,这时候r还是指向数组的首地址,即*r=1;
热心网友
时间:2024-11-28 19:01
#include
int* f(int *p);
main()
{ int a[5]={1,2,3,4,5},*r=a;
r=f(r );
printf(“%d\n”,*r); }
int* f(int *p)
{ p=p+3;
printf(“%d,”,*p);
return p;
}
热心网友
时间:2024-11-28 19:01
注意传递地址和传递变量的区别:
比如
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里面的内容则发生了改变
这边再仔细推敲一下吧,希望对你有帮助