zoukankan      html  css  js  c++  java
  • 34 变量作用域

    1,所谓作用域,就是指变量的有效范围

    2,函数内部声明 / 定义的局部变量,作用域仅限于函数内部

      

       

     3,函数的参数,形式参数,被当做该函数内部的局部变量,如果与全局变量同名,会优先使用局部变量(编译器使用就近原则)

      

       打印结果:

        n=9

    4,在一个代码块,比如 for / if 中的局部变量,那么这个变量的作用域就在该代码块

      

       

    5,在所有函数外部定义的变量叫全局变量,作用域在整个程序有效

    6,初始化局部变量和全局变量

      ①局部变量:系统不会对其默认初始化,必须对局部变量初始化后才能使用功能,否则,程序运行后可能会异常退出

      ②全局变量:系统会自动对其初始化,

        

       ③正确的初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果,因为未初始化的变量会导致一些在内存位置中已经可用的垃圾值。

    7,全局变量保存在内存的全局存储区中,占用静态的存储单元,它的作用域默认是整个程序,也就是所有的代码文件,包括源文件(.c文件)和头文件(.h文件)

      C程序布局图:

      

     8,①局部变量保存在栈中,函数被调用时才动态的为变量分配存储单元,它的作用域仅限于函数内部

      ②C语言规定,只能从小的作用域向大的作用域去寻找变量,而不能反过来,使用更小的作用域中的变量

      ③在同一个作用域,变量名不能重复,在不同的作用域,变量名可以重复,使用时编译器采用就近原则。

      ④由{ } 包围的代码块也拥有独立的作用域

    9,练习1,分析代码输出:

      

       

       f1 中的 price 就是全局变量,f2中的price没有定义,因而也是全局变量,并且把全局变量的值改为 250.0,main中的price是全局变量。

      执行f1时,打印 f1 的 price 即 200.0

      执行f2时,打印 f2 的price 即 250.0

      再执行f1 时,全局price 已被修改为 250.0,因此打印出的price 变为 250.0

      如果将 f2中的 price=250.0 改为  double price =250.0; 则 f2 中的 price 就是  f2 的局部变量,与全局price 无关,就不会改变全局 price 的值,main中第二次调用 f1 时,打印的就仍然是   200.0

    10,练习2:

     1 #include<stdio.h>
     2 
     3 
     4 int n = 10;
     5 void fun1() {
     6     int n = 20; //局部变量
     7     printf("fun1 n=%d
    ", n);  
     8 }
     9 void fun2(int n) {
    10     printf("fun2 n=%d
    ", n);  //n是形参n
    11 }
    12 void fun3() {
    13     printf("fun3 n=%d
    ", n); //全局变量
    14 }
    15 void main() {
    16     int n = 30; //局部变量
    17     fun1();
    18     fun2(n); 
    19     fun3();
    20 
    21     {
    22         int n = 40; //局部变量
    23         printf("block n=%d
    ", n);
    24     }
    25 
    26     printf("main n=%d
    ", n);
    27 }

  • 相关阅读:
    流量调整和限流技术
    微软开源.NET Core的执行引擎CoreCLR{转载}
    Visual Studio 2015 前端开发工作流
    基于Redis的开源分布式服务Codis
    RemoteIE 开发者可跨平台使用IE测试网页
    参加MVP OpenDay 和2015 MVP Community Camp社区大课堂
    etcd:用于服务发现的键值存储系统
    Centos7下安装mono3.10.0
    在 Azure 上使用 Docker运行 Mono
    STOMP协议介绍
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12349784.html
Copyright © 2011-2022 走看看