C语言调用函数后,为什么实参的值没有发生改变?
请看下面这段代码#include<stdio.h>ints(intx){x=2;}voidmain(){intm=1;s(m);printf("%d\n",m);}为啥m...
请看下面这段代码
#include<stdio.h>
int s(int x)
{
x=2;
}
void main()
{
int m=1;
s(m);
printf("%d\n",m);
}
为啥m的值还是1呢? 展开
#include<stdio.h>
int s(int x)
{
x=2;
}
void main()
{
int m=1;
s(m);
printf("%d\n",m);
}
为啥m的值还是1呢? 展开
3个回答
2015-06-24
展开全部
你理解错了
函数里的实质是 实 参 复 制 形 参
你上面s(m)对于函数int s(int x)来说.
函数内部里只是把m的值1传给了x.然后x=2
x的值改变和m有什么关系呢
要想改变m的话可以这么改写函数
int s(int *p)
{
*p=2;
}
void main()
{
int m=1;
s(&m);
printf("%d\n",m);
}
区别在于
第二个用的是地址.虽然也是复制形参,
但是他们是复制的是 地 址.
所以这里s(&m) 使得 &m等于p
&m和p都是地址,
那么*p和m指的是同一个地址的值
所以*p=2本质也就是m=2
展开全部
因为你用的是值传递,需要采用地址传递或者用返回值才可以改变m的值。函数改为int s(int x){x=2;return x;},同时主函数里的s(m)改为m=s(m),这样就可以了,希望对你有帮助~
追问
好的,运行成功了。十分感谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
也可以用C++中的引来解决问题
#include<iostream>
using namespace std;
int s(int &x)
int main()
{
int m=1;
int (m);
cout<<m<<endl;
return 0;}
}
#include<iostream>
using namespace std;
int s(int &x)
int main()
{
int m=1;
int (m);
cout<<m<<endl;
return 0;}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询