區分本地變量、全局變量以及靜態本地變量

一、本地變量
定義:函數的每次運行,就產生了一個獨立的變量空間,在這個空間中的變量,是函數的這次運行所獨有的,稱作本地變量;

  • 定義在函數內部的變量就是本地變量;
  • 參數也是本地變量。

1、變量的生存期和作用域

  • 生存期:從變量出現開始,到它消亡;(實際爲佔據和釋放內存);
  • 作用域:在(代碼內)什麼範圍內可以訪問這個變量;
  • 本地變量的生存期和作用域都在塊內;
    注:{ }所包含的代碼區域,就稱爲塊
    但是if( )語句括號裏的i,在它後面的{ }裏依然有效,可以把()裏的看作整體的一個子塊。

2、本地變量的規則
(1)本地變量就是定義在塊內的;
(2)它可以定義在函數的塊內;
(3)也可以定義在語句的塊內;
(4)甚至可以隨便拉一對大括號來定義;
(5)程序運行進入這個塊之前,其中的變量不存在,離開這個塊,其中的變量就消失了;
(6)塊外面定義的變量在裏面仍有效;
(7)塊裏面定義了和外面同名的變量回掩蓋外面的;
(8)不能再一個塊內定義同名的變量;
(9)本地變量不會被默認初始化;
(10)參數在進入函數之前時就被初始化了;

二、全局變量
定義:定義在函數外面的變量就是全局變量;

1、生存期和作用域

  • 他們與任何函數都無關;
  • 在任何函數內部都可以使用他們;

2、全局變量初始化

  • 沒有做初始化的全局變量會得到0值;(指針會得到NULL值)
  • 只能用編譯時刻已知的值來初始化全局變量;
  • 它們初始化發生在main()函數之前;
  • 注意:如果函數內部存在與全局變量同名的變量,則全局變量被隱;

三、靜態本地變量
定義:在本地變量定義時加上static修飾符就成了靜態本地變量;

特性

  • 當函數離開時,靜態本地變量會繼續保持其值;
  • 靜態本地變量的初始化只會在第一次進入這個函數時做,以後進入函數時會保持上次離開的值;
  • 靜態本地變量具有全局的生存期,以及函數內部的局部作用域;

注意事項

  • 靜態本地變量實際就是特殊的全局變量;
  • 它們位於相同的內存區域;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章