1. 程式人生 > >C語言的區域性變數和外部變數

C語言的區域性變數和外部變數

在函式體或複合語句中宣告的變數為區域性變數。函式中的形式變數也是區域性變數。在所有函式體外定義的變數稱為外部變數(或全域性變數)。

區域性變數

區域性變數具有以下性質:

  • 自動儲存期限。變數的儲存期限是指從變數開始佔用儲存單元到儲存單元被回收之間的程式。程式執行時,在函式體或複合語句中變數定義處,為變數自動分配儲存單元,到函式返回(或複合語句結束)時,收回分配的儲存單元。
  • 程式塊作用域。變數的作用域是可以訪問或引用變數的程式碼段。區域性變數的作用域是從函式或複合語句的變數宣告部分開始,到函式返回或複合語句結束時止。由於區域性變數對於函式(或複合語句)外的程式碼不可見,因此可以在那裡使用相同的變數名。當同名的兩個變數位於內外層且外層變數處於內層變數宣告前時,進入內層變數宣告時,“暫時”隱藏外層變數的宣告,使得變數名稱識別符號表示內層變數,在內層程式塊結束時恢復變數名稱識別符號表示外層變數。
/***************************************
 * local_variable.c                    *
 *                                     *
 * C語言中的區域性變數                   *
 ***************************************/
#include <stdio.h>

int hisLog2(int n)
{
  /*區域性變數*/
  int log = 0;

  /*形式變數n也是函式內的區域性變數*/
  while
(n > 1) { n /= 2; log++; } return log; } int main() { /*區域性變數*/ unsigned int n = 1; printf("輸入一個正整數: "); scanf("%u", &n); printf("log2(%u) = %d", n, hisLog2(n)); return 0; }

區域性變數

帶有static定義的變數具有靜態儲存期限,在程式執行期間永久地佔用儲存單元,在函式返回或複合語句結束時不丟失原有的值。然而它還是隻有程式塊作用域,對函式或複合語句外程式碼具有不可見性。

/**************************************
 * static_local_variable.c            *
 *                                    *
 * C語言中的靜態區域性變數              *
 **************************************/

#include <stdio.h>

void addA()
{
  static int a = 0;

  a++;

  printf("a = %d\n", a);

}

int main()
{
  int i = 0;
  for(i = 0; i < 10; i++)
  {
    static int b = 0;
    printf("b = %d,", ++b);

    addA();
  }

  return 0;
}

靜態區域性變數

外部變數

外部變數具有以下性質:

  • 靜態儲存期限。
  • 檔案作用域。從變數宣告的點開始,一直到閉合檔案的結尾。當使用#include包含一個外部變數的檔案時,外部變數的作用域擴充套件到該檔案末尾。

外部變數使得程式的耦合性增強,修改外部變數會影響程式的其他部分,難以維護和重用。

/**************************************
 * another_file.c                     *
 *                                    *
 * 定義全域性變數的某個檔案             *
 **************************************/

int a = 0;

/**************************************
 * global_variable.c                  *
 *                                    *
 * C語言中的全域性變數                  *
 **************************************/
#include <stdio.h>

#include "another_file.c"

int b = 0;

void addB()
{
  b += 2;
}

void setA(int n)
{
  a = n;
}

int main()
{
  setA(10);
  printf("Now A is %d\n", a);

  addB();
  printf("Now B is %d\n", b);
  return 0;
}

全域性變數

參考文獻

  1. K.N. King 著,呂秀峰 譯. C語言程式設計-現代方法. 人民郵電出版社

相關推薦

C語言區域性變數外部變數

在函式體或複合語句中宣告的變數為區域性變數。函式中的形式變數也是區域性變數。在所有函式體外定義的變數稱為外部變數(或全域性變數)。 區域性變數 區域性變數具有以下性質: 自動儲存期限。變數的儲存期限是指從變數開始佔用儲存單元到儲存單元被回收之間的程式。程

Dll 模組間(dll, exe)使用匯出變數、靜態變數外部變數的試驗與結論

DLL檔案(Dynamic Linkable Library 即動態連結庫檔案),是一種不能單獨執行的檔案,它允許程式共享執行特殊任務所必需的程式碼和其他資源 比較大的應用程式都由很多模組組成,這些模組分別完成相對獨立的功能,它們彼此協作來完成整個軟體系統的工作。可能存在一些模組的功能較為通用,在構造其它軟

C語言區域性變數全域性變數變數的儲存類別(static,extern,auto,register)

C語言中區域性變數和全域性變數變數的儲存類別(static,extern,auto,register) 1----區域性變數和全域性變數 在討論函式的形參變數時曾經提到,形參變數只在被呼叫期間才分配記憶體單元,呼叫結束立即釋放。這一點表明形參變數只有在函式內才是有效的,離開該函式就不能再使用了。

51微控制器C語言程式設計雜談基礎----全域性變數區域性變數

<  部落格宗旨:文章短,時間短,不考驗耐力    > 我記著我在開始編寫51微控制器程式的時候,老是在思考一個問題:怎麼把一個函式中的值傳到另一個函式中去呢???讓我痛不堪言。雖然簡單,但是在那個時候我還是不知道的。 全域性變數:就是在整個工程都可以使用

C語言區域性變數全域性變數解釋

區域性變數 :   在一個函式內部定義的變數是區域性變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使 用它,在此函式外是不能使用這些變數的。這些稱為區域性變數。   說明     (1)  不同函式中可以使用相同名字的變數,它們代表不同的變數,互不干擾。   

c語言中的變數(區域性變數外部變數,靜態變數,暫存器變數) .

c語言中變數分為四類,分別是 1.auto   自動變數 2.static   靜態存貯分配變數(又分為內部靜態和外部靜態) 3.extern  外部變數/全程變數(用於外部變數說明) 4.register  暫存器變數(分配在硬體暫存器中) 四

c語言區域性變數應該注意什麼?

去年我們部門在17屆大學生在轉正述職答辯時,有位同學(同事)被領導提出一個問題:“c語言區域性變數應該注意什麼?” 當時我的第一反應就是,static靜態變數,命名與全域性變數避免衝突。我記得那位同學說的是注意記憶體,今天突然想到這個問題,我就把知道的都寫出來了(歡迎大家在下面進行修正和補充

C語言--區域性變數作為指標返回值的問題

程式碼: #include <stdio.h> #include <stdlib.h> int* getStu(int x, int y) {         int* i;         *i = x+y;         return i; }

【疑問與解答】地址的位數不是作業系統有關嗎?為什麼我的是64位的作業系統,寫的C語言程式,裡面的變數地址是32位的?

問:地址的位數不是和作業系統有關嗎?為什麼我的是64位的作業系統,寫的C語言程式,裡面的變數地址是32位的? 答:你說你的系統是64位,但是,不知您的C編譯程式採用了什麼模式。 具體的C編譯程式有不同的模式,如“微模式”、“小模式”、“中模式”、“大模式”、“巨模式”等等。

C++程式設計語言練習4.6 區域性名字外部名字的長度限制

書中程式碼,利用模板副檔名字長度#include <iostream> #include <typeinfo> template<typename T,typename U> struct Doublify{}; template&l

C語言中的靜態變數普通變數的區別

下面用程式碼說明: 一個可執行程式包括BSS段、資料段、程式碼段(文字段)。 bss segment ,data segment ,code/text segment ①BSS(Block by Start Symbol) :通常指用來存放程式中未初化的全域性變數和靜態變數

C語言區域性變數在記憶體棧中的順序

首先總結規則,詳細分析見下面: 規則1:記憶體由低到高優先分配給佔位8位元組、4位元組、2位元組、1位元組的資料型別 資料型別佔位說明: 8位元組:double、longlong int 4

C語言中常量變數

在C語言中,常量和變數都是可以用來儲存和表示資料的,常量值在程式執行的過程中是不可變的,而變數是可變的 1,常量的概念 常量是不可變的量,C語言中數值可以用常量表示,常量可以表示各種資

c語言區域性變數預設初始值

C語言中,定義區域性變數時如果未初始化,則值是隨機的,這是為什麼呢?定義區域性變數,其實就是在棧中通過移動棧指標來給程式提供一個記憶體空間和這個區域性變數名繫結。因為這段記憶體空間在棧上,而棧記憶體是反

c語言區域性變數的記憶體地址分配順序

測試程式: #include <stdio.h> int main(){ unsigned int ui = 10; char c = 11; unsigne

C++靜態全域性變數全域性變數的區別

    靜態全域性變數 非靜態全域性變數 儲存方式 靜態儲存 靜態儲存 作用域 定義該變數的原始檔內 所有原始檔   解釋: 共同點:

C語言const:禁止修改變數的值

C語言const:禁止修改變數的值 有時候我們希望定義這樣一種變數,它的值不能被改變,在整個作用域中都保持固定。例如,用一個變數來表示班級的最大人數,或者表示緩衝區大小。為了滿足這一要求,可以使用const關鍵字對變數加以限定: const int MaxNum = 100; 

Python-13-函式_02_區域性變數全域性變數

1 """ 2 # 1、區域性變數和全域性變數 3 4 在子程式中定義的變數稱為區域性變數,在程式的一開始(程式碼前面沒有縮排)定義的變數稱為全域性變數。 5 全域性變數作用域是整個程式,區域性變數作用域是定義該變數的子程式。 6 當全域性變數與區域性變數同名時: 7 在定義區域性變數的

JAVA基礎(44)---區域性變數成員變數的區別及封裝

成員變數和區域性變數的區別                       

T-SQL 區域性變數全域性變數

區域性變數 1 use StudentManageDB 2 go 3 --宣告學號變數 4 declare @stuid int,@stuname varchar(20) 5 6 --查詢李銘的資訊 7 set @stuname='李銘' 8 select StudentId,Stu