jkjkre
jkjkre
采纳率88.9%
2019-03-13 10:10 阅读 586

【C语言】一道简单的局部变量和全局变量的题

#include <stdio.h>

int main(){

int a=1,b=3;
{
    int a=1,c=2;
    a=a+b;
    b=c+a;
    printf("a=%d,b=%d\n",a,b);
}
printf("a=%d,b=%d\n",a,b);

return 0;


}

编译器输出是
a=4,b=6
a=1,b=6
请问第二个输出的时候,为什么b是6呢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    qq_22847605 qq_22847605 2019-03-13 10:53

    b=c+a是再a=a+b之后执行的,a=a+b时,a的值变为4,而之后算b=c+a的时候,c=2,a=4的情况下,b=6啊

    点赞 1 评论 复制链接分享
  • JRneymar JRneymar 2019-03-13 11:16

    括号里的b哪里是局部变量了,b是在代码块外面定义的,只是在代码块里面对它赋值,最后输出的肯定是6啊

    点赞 1 评论 复制链接分享
  • qq_41615027 qq_41615027 2019-03-13 14:41

    你没在括号内定义b
    所以b一直是全局变量
    你在括号外定义的a的全局变量
    括号内又定义了a,是局部变量
    所以a有2次不同值的输出
    b只定义了全局变量
    你在{}内将b再定义一次,就会输出正确了。

    点赞 1 评论 复制链接分享
  • yuanquanzheng 草香农 2019-03-13 15:37

    变量的使用需要遵循最基本的两项要求:
    1. 就近原则:当全局变量和局部变量出现变量名称相同,程序调用变量时,将会使用局部变量作为当前变量,
    实际上全局变量和局部变量是两个完全不同的变量,拥有相互独立的内存空间,使用上也不相互影响。
    2. 作用域: 局部变量的有效范围从当前代码块始到当前代码块终。

    在main函数中包含大括号中的声明的变量a只在大括号中有效,在大括号内调用的任何有关a变量的引用,
    均是指在大括号内声明a变量,而不是在main函数起始声明的a变量。

    当代码块结束,代码块所占用的资源被释放,此时对a变量的引用为main函数起始时声明的a变量

    点赞 1 评论 复制链接分享

相关推荐