is.na 2020-12-05 13:55 采纳率: 50%
浏览 8
已采纳

C++中“;“被换为”,“,c的值最后打印出来不同?

#include<stdio.h>
int c, a = 4; /*定义整型变量,并赋值*/
int func(int a, int b)/*定义func()函数,函数值为整数,a,b为形式参数*/
{
c = a * b;
a = b - 1;
b++;
return (a + b + 1);
}
int main(void)
{
int b = 2, p = 0; c = 5; /*定义三个整型变量b、p、c,并进行赋值*/
p = func(b, a); /*调用func()函数*/
printf("%d,%d,%d,%d\n", a, b, c, p);
}

这是源代码,结果为4,2,8,9

第12行改为

	int b = 2, p = 0,c = 5; 

结果变为  4,2,5,9

以上原因?

大佬给个详细的解释,谢谢

  • 写回答

4条回答 默认 最新

  • include_iostream_ 2020-12-05 14:49
    关注

    你有一个全局变量c,而在C语言中,你是可以定义一个与全局变量同名的局部变量的,此时局部变量屏蔽全局变量。

    用分号时,main首先定义了**两个**局部变量,main函数里使用的是**全局变量c**(下称“全局c”),**不存在局部变量c**(下称“局部c”),c=5将置全局c为5,func函数中,c=a*b将全局c置8,于是输出8。

    你用逗号时,main定义了**三个**局部变量,main函数里使用的是**局部c**,**全局c被main屏蔽**。局部c初值为5。该局部c仅在main中有效,func中**仍使用全局c**,于是**全局c被置为8**,**main中的局部c不受影响**。由于printf写在main中,局部c屏蔽了全局c,所以它会输出局部c的值也就是5。尽管如此,全局c的值确实是8。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度