黑马程序员_C语言中变量作用域问题

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

示例代码一:

#include <stdio.h>
int main()
{
	    int score = 100;
    
    {
        int score = 200;
        
        {
            score = 50;
        }
        
        printf("score=%d\n", score);
    }
    
    printf("score=%d\n", score);
    
    
    return 0;
}

输出结果:score=50

          score=100

变量的作用域:从定义变量的那一行代码开始,一直到所在的代码块结束。代码块结束时,代码块内所定义的变量(存储空间)将被回收,所以第二个printf函数的输出结果为:score=100,而不是score=200。在代码块{ score = 50; }中,由于该代码块中没有定义score变量,所以在进行赋值操作时,会到该代码块外面(上一层代码块中)找score变量,并进行赋值操作。所以,此时上一层代码块中的score变量的值已经变为50,而不是原来的200了。又由于就近原则,第一个printf函数访问score变量时,就在其所在的代码块中找score变量。而此时该代码块中score的值为50,所以第一个printf函数的输出结果为:score=50。若把代码块{ score = 50; }改为:{ int score = 50; },此时不会修改上一层代码块中score的值,因为该代码块内定义了自己的score变量,所以赋值操作只会对该代码块内的score起作用,该代码块结束时,其中的score变量会被回收,此时,第一个printf函数的输出结果将会变为:score=200

示例代码二:

#include <stdio.h>
int main()
{
  	if (10 > 6)
  {
  	int a = 5; 
  } 
  printf ("%d\n", a);  
  return 0;
}

此时编译器会报错,因为变量a的作用域只限于其所在的代码块内部,该代码块结束时,变量a将会被回收。所以printf函数访问不到变量a,编译报错。

示例代码三:

#include <stdio.h>
int main()
{
  if (10 > 6)
  	int a = 5;
  return 0;
}

此时编译器也会报错,因为此时变量a的作用域不明确,编译器不知道变量a的作用域,会直接报错,应将if后面的代码用大括号包住。(如果在if语句后面定义新的变量,必须用大括号。)

示例代码四:

#include <stdio.h>
int main()
{
	char c = '+';
    int a = 10;
    int b = 20;
    switch (c) {
        case '+':
			int sum = a + b;
            printf("和是%d\n", sum);
            break;  
        case '-':
			int minus = a - b;
            printf("差是%d\n", minus);
            break;
	}
	return 0;
}

这段代码编译时同样会报错,犯的错误与示例代码三一样,都是变量作用域不明确,代码中变量sum与变量minus的作用域不明确,应将case后面的代码用大括号包住。(如果要在case后面定义新的变量,必须用大括号{}包住。)

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值