c语言中函数可否改变参数值

即传递实参如PASCAL中f(varc:integer)C中如何实现... 即传递实参 如PASCAL中f(var c:integer) C中如何实现 展开
 我来答
俎金兰丁娴
2020-02-17 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:27%
帮助的人:773万
展开全部
#include
void
foo(int
x,
int
y,
int
z)
{
printf("x
=
%d
at
[%x]n",
x,
&x);
printf("y
=
%d
at
[%x]n",
y,
&y);
printf("z
=
%d
at
[%x]n",
z,
&z);
}
int
main(int
argc,
char
*argv[])
{
foo(100,
200,
300);
return
0;
}
运行结果:
x
=
100
at
[bfe28760]
y
=
200
at
[bfe28764]
z
=
300
at
[bfe28768]
c程序栈底为高地址,栈顶为低地址,因此上面的实例可以说明函数参数入栈顺序的确是从右至左的。可到底为什么呢?查了一直些文献得知,参数入栈顺序是和具体编译器实现相关的。比如,pascal语言中参数就是从左到右入栈的,有些语言中还可以通过修饰符进行指定,如visual
c++.即然两种方式都可以,为什么c语言要选择从右至左呢?
进一步发现,pascal语言不支持可变长参数,而c语言支持这种特色,正是这个原因使得c语言函数参数入栈顺序为从右至左。具体原因为:c方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和动态参数个数的方向相反。
因此,c语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。换句话说,如果不支持这个特色,c语言完全和pascal一样,采用自左向右的参数入栈方式
TorvalBill
推荐于2017-10-14 · 超过10用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:19.8万
展开全部
C语言可以通过传递指针来改变变量的值:
int a=5;
void f(int *a)
{
*a = 6;
}
调用函数 f(&a);
则现在 a=6;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3f9d5e5
2012-10-10 · TA获得超过326个赞
知道小有建树答主
回答量:151
采纳率:0%
帮助的人:126万
展开全部
用引用可以在函数中改变参数值 例如 fun (int &a) {a++;} 这样就改变了参数的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CHXY408
2012-10-10 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:74.8万
展开全部
在参数名前面加上&符号就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
记住一座城
2012-10-09 · TA获得超过728个赞
知道小有建树答主
回答量:1091
采纳率:33%
帮助的人:666万
展开全部
形参不能改变实参
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式