C语言问题,这里y是全局变量,为什么void函数中改变y的值后,退出void函数后就还原了?

 我来答
上海长英
2021-02-22 · 上海长英,自动化电气设计,软件编程。
上海长英
采纳数:1072 获赞数:22874

向TA提问 私信TA
展开全部
void p(int *x,int y)
上面函数中 的int y 是一个局部变量,存储的是一个 int 类型的值。
int *x 是一个局部变量,是一个 int型指针,存储的是一个 int 类型变量的地址。
在 main 函数中调用 p(&x,y) 时,将全局变量的x 的地址 赋值给你 p(int*x,int y) 中的局部变量 int *x,将全局变量的 x 的值,赋值给了 局部变量的 y.
请注意函数 void p( int *x ,int y)中的 x,y 和全局变量的x,y 重名,但是不是同一个变量。
在void p(int *x,int y)中 使用的是局部变量的x与y.
p(int *x,int y)中的 x 是指针,保存的是全局变量 int x 的指针,对指针的操作就是 对全局变量 int x 的操作,但是其中y 是int y 只是对局部变量的操作。所以对全局变量的int y 没有影响。
你可以尝试 修改void p(int *x,int y)改为void p(int *x,int *y),调用时使用 p(&x,&y),然后再次运行 看看结果。
-----------------------
希望我的回答对你有所帮助,C语言的指针知识点是 不好理解的,需要多琢磨,多实践才能理解和掌握。
百度网友a7d5199
2021-02-19 · 超过63用户采纳过TA的回答
知道小有建树答主
回答量:485
采纳率:54%
帮助的人:46.3万
展开全部
函数参数问题,如果函数想要改变全局Y,那就要传Y的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
arongustc
科技发烧友

2021-02-19 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:6049万
展开全部
函数形参中的y虽然和全局函数的名字一样,却是一个不同的变量,两者没有任何关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
唯有无解Answer
2021-02-20 · 超过22用户采纳过TA的回答
知道答主
回答量:119
采纳率:41%
帮助的人:20.3万
展开全部
当在调用变量时有同名变量起作用的时候,则使用作用域离自己最近的变量,虽然C语言支持这种写法,但是不提倡,解读性不高,懂这个原理就好。
这时候外面的Y相当于全局变量,在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等。不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式