【C語言】作用域規(guī)則

作者在循環(huán)中定義變量并在外部進行調用時,遇到了以下報錯:

代碼(錯誤):

#include <stdio.h>
int main()
{
    int n;
    scanf_s("%d", &n);
    for (int factorial = 1; n >= 1; n--)
    {
        factorial *= n;
    }
    return factorial;
}

修改(正確):

#include <stdio.h>
int main()
{
    int n;
    scanf_s("%d", &n);
    int factorial = 1;
    for (; n >= 1; n--)
    {
        factorial *= n;
    }
    return factorial;
}

原因:

在 if、for、do-while 中是有作用域的,若在這些語句塊中定義變量的話,到了其外部就無法訪問。

作用域:

任何一種編程中,作用域是程序中定義的變量所存在的區(qū)域,超過該區(qū)域變量就不能被訪問。C 語言中有三個地方可以聲明變量:

  1. 在函數(shù)或塊內部的局部變量
  2. 在所有函數(shù)外部的全局變量
  3. 形式參數(shù)的函數(shù)參數(shù)定義中

讓我們來看看什么是局部變量、全局變量和形式參數(shù)。

局部變量:

在某個函數(shù)或塊的內部聲明的變量稱為局部變量。它們只能被該函數(shù)或該代碼塊內部的語句使用。局部變量在函數(shù)外部是不可知的。

全局變量:

全局變量是定義在函數(shù)外部,通常是在程序的頂部。全局變量在整個程序生命周期內都是有效的,在任意的函數(shù)內部能訪問全局變量。

全局變量可以被任何函數(shù)訪問。也就是說,全局變量在聲明后整個程序中都是可用的。

在程序中,局部變量和全局變量的名稱可以相同,但是在函數(shù)內,如果兩個名字相同,會使用局部變量值,全局變量不會被使用。

形式參數(shù):

函數(shù)的參數(shù),形式參數(shù),被當作該函數(shù)內的局部變量,如果與全局變量同名它們會優(yōu)先使用。

全局變量與局部變量在內存中的區(qū)別

  • 全局變量保存在內存的全局存儲區(qū)中,占用靜態(tài)的存儲單元;
  • 局部變量保存在棧中,只有在所在函數(shù)被調用時才動態(tài)地為變量分配存儲單元。

初始化局部變量和全局變量

當局部變量被定義時,系統(tǒng)不會對其初始化,您必須自行對其初始化。定義全局變量時,系統(tǒng)會自動對其初始化,如下所示:

數(shù)據(jù)類型 初始化默認值
int 0
char '\0'
float 0
double 0
pointer NULL

正確地初始化變量是一個良好的編程習慣,否則有時候程序可能會產生意想不到的結果,因為未初始化的變量會導致一些在內存位置中已經可用的垃圾值。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 任何一種編程中,作用域是程序中定義的變量所存在的區(qū)域,超過該區(qū)域變量就不能被訪問。C 語言中有三個地方可以聲明變量...
    徐大哈_401d閱讀 301評論 0 0
  • 初始化局部變量和全局變量 當局部變量被定義時,系統(tǒng)不會對其執(zhí)行初始化,需要用戶自行對其操作。 當全局變量被定義時,...
    泰迪雜談閱讀 889評論 0 0
  • 任何一種編程中,作用域是程序中定義的變量所存在的區(qū)域,超過該區(qū)域變量就不能被訪問。C 語言中有三個地方可以聲明變量...
    快樂舔狗董梟垚閱讀 231評論 0 0
  • 2019年3月16日 (聲明:理論知識部分來自菜鳥教程網(wǎng)站!)今日學習內容: 18、C 作用域規(guī)則 任何一種編程中...
    竹予青青閱讀 377評論 0 3
  • 函數(shù) 函數(shù)是一組一起執(zhí)行一個任務的語句。每個 C 程序都至少有一個函數(shù),即主函數(shù) main() ,所有簡單的程序都...
    蘇州丸子閱讀 573評論 0 0

友情鏈接更多精彩內容