淺析c語言中的變數(局部變數,外部變數,靜態變數,寄存器變數)__c語言

來源:互聯網
上載者:User


c語言中變數分為四類,分別是

1.auto   自動變數

2.static   靜態存貯分配變數(又分為內部靜態和外部靜態)

3.extern  全程變數(用於外部變數說明)

4.register  寄存器變數(分配在硬體寄存器中)

四大類,所有變數必須先說明(定義),後使用。


下面分別介紹

1.自動變數(局部變數)

局部變數:在一個函數開頭或段開頭處說明的變數,它有幾個特徵,,

a、範圍為定義它的函數

b、編譯器不會對自動變數給予隱含的初值,故其值不確定,因此每次使用前必須明確的置初值。

c、形參是自動變數,範圍僅限於相應函數內

d、自動變數隨函數的引用而存在和消失,由一次調用到下一次調用之間不保持值。

#include <stdio.h>void print_number (int x, int y) {         int m,sum;         for(m = x;m<y;m++) {                 sum +=m;        }        printf("%d\n",sum);}void main(void) {     print_number(3,5);     print_number(3,5);}
這個程式列印的值均不正確,因為sum未賦初值,造成了列印的數為隨機數。 我們把sum賦初值為0再執行以下,結果就正確了,這個程式說明局部變數必須要先賦初值再使用,另外說明局部變數的生命週期為函數調用時開始,函數調用完成時消亡。


2.外部變數:在函數外部定義的變數即為外部變數,它的範圍是整個程式(全程變數)。


a.    c程式可以分別放在幾個檔案上,每個檔案可以作為一個編譯模組分別進行編譯。外部變數只需在某個檔案上定義一次,其它檔案若要引用此變數時,應用extern加以說明(外部變數定義時不必加extern關鍵字)。

b.   在同一檔案中,若前面的函數要引用後面定義的外部(在函數之外)變數時,在函數裡加extern加以說明。
引進外部變數的原因:解決函數單獨編譯的協調;與變數初始化有關;外部變數的值是永久的;解決資料共用; 注意:函數本身也被認為是外部變數



3.靜態變數:分為內部靜態變數和外部靜態變數


內部靜態變數:a.在局部變數前加上static就為內部靜態變數

b.靜態局部變數仍是局部變數,其範圍仍在定義它的函數範圍內,但它採用靜態存貯分配(由編譯器在編譯時間分配,而一般的自動變數和函數形參均採用動態存貯分配,即在運行時分配空間),當函數執行完,返回調用點時,該變數並不撤銷,再次調用時,其值將繼續存在。


外部靜態變數:a.在函數外部定義的變數前加static即為外部靜態變數

b.範圍為定義它的檔案,即成為該檔案的私人變數,其他檔案上的函數一律不得直接存取,除非通過它所在檔案上的函數進行操作,這可實現資料隱          藏。


4.寄存器變數:只有自動(局部)變數和函數參數才能進一步指定為寄存器存貯類

a.使用register變數可以提高存取速度,但寄存器變數的數目依賴於具體機器,聲明多了也只有前幾個有效。

b.只限於int,char,short ,unsigned和指標類型用寄存類。

c.不能對register變數取地址(即&操作)





變數的初始化:

外部變數和靜態變數由編譯器給予隱含的初始值0;
局部變數的初始化每進入函數便初始化一次。
外部或靜態變數僅在編譯時間初始化一次。
自動變數或寄存器變數只能顯示初始化,否則將有不確定的值。
外部資料的說明,如果帶有初始化項,則當成一個定義。
在c語言中函數不能嵌套定義,但是變數可以嵌套定義。


inti = 0;

main( )

{

inti = 1;

printf(“i=%d, ”, i);

{

inti = 2; printf(“i=%d, ”, i);

{

i += 1;

printf(“i=%d, ”, i); }

printf(“i=%d, ”, i);

}

printf(“i=%d\n ”, i);

}


結果:i=1, i=2, i=3, i=3, i=1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.