㈠ 在c語言中文件有幾種操作類型
主要是兩種文件類型:1)文本文件,2)
二進制文件
。
一般來說,人類可讀的文件都作為文本文件,例如一片文章。其餘都作為二進制文件,例如一個程序。
在C語言中,文件的操作是通過FILE
結構體
進行了,利用fopen返回一個指向FILE結構體的指針,在使用
fopen函數
過程中,使用mode控制符對是否打開哪類文件進行控制:
FILE
*fopen(
const
char
*filename,
const
char
*mode
);
filename:文件名,mode:打開的模式,規定了是可讀、可寫、追加之類的屬性。
r
以只讀方式打開
文件,該文件必須存在。
r+
以可讀寫方式打開文件,該文件必須存在。
rb+
讀寫打開一個二進制文件,允許讀寫數據,文件必須存在。
w
打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+
以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
(原來的EOF符不保留)
wb
只寫打開或新建一個二進制文件;只允許寫數據。
wb+
讀寫打開或建立一個二進制文件,允許讀和寫。
ab+
讀寫打開一個二進制文件,允許讀或在文件末追加數據。
如果調用失敗,返回一個空指針。
㈡ C語言可以處理的文件類型有哪些
主要是兩種文件類型:1)文本文件,2)二進制文件。
一般來說,人類可讀的文件都作為文本文件,例如一片文章。其餘都作為二進制文件,例如一個程序。
在C語言中,文件的操作是通過FILE結構體進行了,利用fopen返回一個指向FILE結構體的指針,在使用fopen函數過程中,使用mode控制符對是否打開哪類文件進行控制:
FILE *fopen( const char *filename, const char *mode );
filename:文件名,mode:打開的模式,規定了是可讀、可寫、追加之類的屬性。
r 以只讀方式打開文件,該文件必須存在。
r+ 以可讀寫方式打開文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,允許讀寫數據,文件必須存在。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。
ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。
如果調用失敗,返回一個空指針。
㈢ 在C語言中,文件按存儲形式劃分可分為-----和-----
在C語言中文件按存儲形式可劃分為文本文件和二進制文件,文本文件又稱純文本文件。
文本文件是一種計算機文件,它是一種典型的順序文件,其文件的邏輯結構又屬於流式文件。文本文件是指以ASCII碼方式(也稱文本方式)存儲的文件,更確切地說,英文、數字等字元存儲的是ASCII碼,而漢字存儲的是機內碼。文本文件中除了存儲文件有效字元信息(包括能用ASCII碼字元表示的回車、換行等信息)外,不能存儲其他任何信息。
二進制文件是指包含在 ASCII及擴展 ASCII 字元中編寫的數據或程序指令的文件,廣義的二進制文件即指文件,由文件在外部設備的存放形式為二進制而得名。狹義的二進制文件即除文本文件以外的文件。文本文件是一種由很多行字元構成的計算機文件。文本文件存在於計算機系統中,通常在文本文件最後一行放置文件結束標志。文本文件的編碼基於字元定長,解碼相對要容易一些;二進制文件編碼是變長的,靈活利用率要高,而解碼要難一些,不同的二進制文件解碼方式是不同的。
㈣ c語言在源文件中如何使用其他源文件自定義的類型
在a文件 中定義變數:
int giVar ; //必須是全局變數
在b中調用前進行外部聲明,即可,如:
extern int giVar ;
㈤ c語言什麼是變數變數的定義
c語言中常常用到變數,c語言中什麼是變數呢?那麼下面是我整理的c語言變數的定義,歡迎閱讀。
c語言什麼是變數
變數來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變數可以通過變數名訪問。在指令式語言中,變數通常是可變的;但在純函數式語言(如Haskell)中,變數可能是不可變(immutable)的。在一些語言中,變數可能被明確為是能表示可變狀態、具有存儲空間的抽象(如在Java和Visual Basic中);但另外一些語言可能使用其它概念(如C的對象)來指稱這種抽象,而不嚴格地定義“變數”的准確外延。
變數介紹
由於變數讓你能夠把程序中准備使用的每一段數據都賦給一個簡短、易於記憶的名字,因此它們十分有用。變數可以保存程序運行時用戶輸入的數據(如使用InputBox函數在屏幕上顯示一個對話框,然後把用戶鍵入的文本保存到變數中)、特定運算的結果以及要在窗體上顯示的一段數據等。簡而言之,變數是用於跟蹤幾乎所有類型信息的簡單工具。
變數聲明後沒有賦值的話 編譯器會自動提示並賦予默認值
變數是一種使用方便的佔位符,用於引用計算機內存地址,該地址可以存儲Script運行時可更改的程序信息。例如,可以創建一個名為Click Count的變數來存儲用戶單擊Web頁面上某個對象的次數。使用變數並不需要了解變數在計算機內存中的地址,只要通過變數名引用變數就可以查看或更改變數的值。在VB Script中只有一個基本數據類型,即Variant,因此所有變數的數據類型都是Variant。
聲明變數
聲明變數的一種方式是使用Dim語句、Public語句和Private語句在Script中顯式聲明變數。例如:
Dim Degrees Fahrenheit
聲明多個變數時,使用逗號分隔變數。例如:
Dim Top, Bottom, Left, Right
另一種方式是通過直接在Script中使用變數名這一簡單方式隱式聲明變數。這通常不是一個好習慣,因為這樣有時會由於變數名被拼錯而導致在運行Script時出現意外的結果。因此,最好使用Option Explicit語句顯式聲明所有變數,並將其作為Script的第一條語句。
命名規則
首先,我們必須給變數取一個合適的名字,就好像每個人都有自己的名字一樣,否則就難以區分了。在VB6中,變數的命名必須遵循以下規則:
(1)變數名必須以字母或下劃線打頭,名字中間只能由字母、數字和下劃線“_”組成;最後一個字元可以是類型說明符;
(2)變數名的長度不得超過255個字元;
(3)變數名在有效的范圍內必須是唯一的。有效的范圍就是引用變數可以被程序識別、使用的作用范圍——例如一個過程、一個窗體等等。有關引用變數作用范圍的內容,將在以後介紹。
(4)變數名不能是VB中的保留字(關鍵字),也不能是末尾帶類型說明符的保留字,但可以把保留字嵌入變數名,關鍵字是指VB6語言中的屬性、事件、方法、過程、函數等系統內部的標識符。如已經定義的詞(if、endif、while、loop等)、函數名(len、format、msgbox等)。像Print、Print$是非法的,而Myprint是合法的。例如:strName1,intMax_Length,intLesson,strNo3等是合法的變數名,而A&B,all right,3M,_Number等是非法的變數名。
注意:
(1)變數名在VB中是不區分大小寫的(如ABC、aBc、abc等都是一樣的)。C語言中區分大小寫。不同的語言有不同的規則。
(2)定義和使用變數時,通常要把變數名定義為容易使用閱讀和能夠描述所含數據用處的名稱,而不要使用一些難懂的縮寫如A或B2等。例如:假定正在為水果鋪編一個銷售蘋果的軟體。我們需要兩個變數來存儲蘋果的價格和銷量。此時,可以定義兩個名為Apple_Price和Apple_Sold的變數。每次運行程序時,用戶就這兩個變數提供具體值,這樣看起來就非常直觀。具體方法是:通過用一個或多個單片語成有意義的變數名來使變數意義明確。例如,變數名SalesTaxRate就比Tax或Rate的意義明確得多。
(3)根據需要混合使用大小寫字母和數字。一個合理協議是,變數中每個單詞的第一個字母大寫,例如:DateOfBirth。
(4)另一個合理協議是,每個變數名以兩個或三個字元縮寫開始,這些字元縮寫對應於變數要存儲數據的數據類型。例如,使用strName來說明Name變數保存字元串型數據。這種命名方法叫匈牙利命名法
格式 變數類型 + 變數名字
比如剛才說的strname "str" 是"string"的縮寫 "Name" 則是變數名字
注意 變數類型都是小寫 而且變數名字是開頭大寫
C# 命名方法
1
stringstrName
VB 命名方法
1
DimstrNameasString
雖然無須過多地關注字元縮寫的細節,但以後還是需要看一下這方面的約定。在Visual Basic聯機幫助和許多Visual Basic高級編程的書籍中都可以找到這一約定的細節。
存活期
變數存在的時間稱為存活期。Script級變數的存活期從被聲明的一刻起,直到Script運行結束。對於過程級變數,其存活期僅是該過程運行的時間,該過程結束後,變數隨之消失。在執行過程時,局部變數是理想的臨時存儲空間。可以在不同過程中使用同名的局部變數,這是因為每個局部變數只被聲明它的過程識別。
作用域
變數的作用域由聲明它的位置決定。如果在過程中聲明變數,則只有該過程中的代碼可以訪問或更改變數值,此時變數具有局部作用域並被稱為過程級變數。如果在過程之外聲明變數,則該變數可以被Script中所有過程所識別,稱為Script級變數,具有Script級作用域。
生存期
是指變數的分配與回收的全過程,
類型
屬性變數和用戶自己建立的變數。
當我們在窗體中設計用戶界面時,vb6會自動為產生的對象(包括窗體本身)創建一組變數,即屬性變數,並為每個變數設置其預設值。這類變數可供我們直接使用,比如引用它或給它賦新值。
用戶也可以創建自己的變數,以便存放程序執行過程中的臨時數據或結果數據等等。在程序中,這樣的變數是非常需要的。下面就介紹這類變數的創建和使用方法。
聲明變數
變數在使用前,必須在代碼中進行聲明,即創建該變數。
在使用變數之前,大多數語言通常首先需要聲明變數。就是說,必須事先告訴編譯器在程序中使用了哪些變數,及這些變數的數據類型以及變數的長度。這是因為在編譯程序執行代碼之前編譯器需要知道如何給語句變數開辟存儲區,這樣可以優化程序的執行。
聲明變數有兩種方式分別是隱式聲明、顯式聲明。
隱式聲明:
變數可以不經聲明直接使用,此時VB給該變數賦予預設的類型和值。這種方式比較簡單方便,在程序代碼中可以隨時命名並使用變數,但不易檢查。
顯式聲明:
用聲明語句創建變數。
強制顯式聲明變數:
為了避免寫錯變數名引起的麻煩,用戶可以規定,只要遇到一個未經明確聲明就當成變數的名字,VB都發出錯誤警告。方法是----強制顯式聲明變數。要強制顯式聲明變數,只須在類模塊、窗體模塊或標准模塊的聲明段中加入這條語句:
Option Explicit
這條語句是用來規定在本模塊中所有變數必須先聲明再使用,即不能通過隱式聲明來創建變數。在添加Option Explicit語句後,VB將自動檢查程序中是否有未定義的變數,發現後將顯示錯誤信息。
如果要自動插入Option Explicit語句,用戶只要在“工具”菜單中選取“選項”命令,然後單擊“選項”對話框中的“編輯器”選項卡,再選中“要求變數聲明”選項
這樣VB就會在任何新模塊中自動插入Option Explicit語句,但只會在新建立的模塊中自動插入。所以對於已經建立的模塊,只能用手工方法向現有模塊添加Option Explicit語句(只有再重新啟動VB,這項功能才有效)。
理變數范圍
變數的范圍確定了能夠知曉該變數存在的那部分代碼。在一個過程內部聲明變數時,只有過程內部的代碼才能訪問或改變那個變數的值;它有一個范圍,對該過程來說是局部的。但是,有時需要使用具有更大范圍的變數,例如這樣一個變數,其值對於同一模塊內的所有過程都有效,甚至對於整個應用程序的所有過程都有效。Visual Basic 允許在聲明變數時指定它的范圍。
存儲類型
我們在程序中會經常定義一些變數來保存和處理數據。從本質上看,變數代表了一段可操作的內存,也可以認為變數是內存的符號化表示。當程序中需要使用內存時,可以定義某種類型的變數。此時編譯器根據變數的數據類型分配一定大小的內存空間。程序就可以通過變數名來訪問對應的內存了。
如果說變數的數據類型決定了對應內存的大小,那麼存儲類型則影響著對應內存的使用方式。所謂使用方式,具體說就是在什麼時間、程序的什麼地方可以使用變數,即變數的生命周期和作用域。
先了解一些基本常識。一、在程序運行時內存中有三個區域可以保存變數:靜態存儲區、棧(stack)和堆(heap)。二、根據變數定義的位置可分為全局變數(定義在函數體外的變數)和局部變數(定義在函數體內的變數,包括形參)。
所有的全局變數和靜態局部變數(定義時使用關鍵字static)都保存在靜態存儲區,其特點是:在編譯時分配內存空間並進行初始化。在程序運行期間,變數一直存在,直到程序結束,變數對應的內存空間才被釋放。
而所有的非靜態局部變數(又稱為自動變數)保存在棧(stack)中,其特點是:在變數所在的函數或模塊被執行時動態創建,函數或模塊執行完時,變數對應的內存空間被釋放。換句話說,函數或模塊每被執行一次,局部變數就會重新被分配空間。如果變數定義時沒有初始化,那麼變數中的值是隨機數。
所有用malloc分配的內存(又稱為動態內存)都在堆(heap)中,其特點是:一般通過指針來訪問動態分配的內存。即可以通過free來手動釋放動態內存,也可以在程序結束時由系統自動釋放。
以上討論的是變數的生命周期,下面來看作用域。作用域指的是變數的可見范圍,即在變數的生命周期內,程序的哪些部分可以使用該變數。
全局變數的作用域從定義點開始一直到源文件的結束。如果要在定義點之前使用全局變數的話就需要使用關鍵字extern對作用域進行擴展。全局變數預設是可以被其他文件引用的。如果希望僅限於本文件使用的話,需要在定義時使用關鍵字static。
對於局部變數來說,無論是靜態局部變數還是自動變數,作用域都僅限於定義該變數的函數或模塊。
動態內存只要沒有被釋放就可以在程序的任何地方使用,前提是要知道動態內存的地址。
註:static加在全局變數前影響的是作用域,加在局部變數前影響的是生命周期。
變數類型
C語言中,變數分為全局變數和局部變數;也可以這樣分:自動變數,靜態變數.前者是按變數作用范圍來分的,而後者是按變數存儲方式來分的.
如果按存儲佔用空間來分,可以是整型變數,字元型變數,浮點型變數等.當然還有數組,結構體變數等.
C語言還有一個重要變數:指針變數.它存放的值是一個內存地址.
操作系統變數
操作系統變數
C語言中變數名是有大小寫之分的,如SUN與sun就是兩個不同的變數名。
另一點,聲明變數時,可以不用聲明就直接賦值來決定變數類型的語言如(javascript,flash cs3.0以前,等),這類語言變數的聲明通常被稱為弱類型,而如(c++等)必須先聲明,後使用,而且聲明時必須確定變數類型,這種就是嚴格的數據類型.
變數有兩種類型:屬性變數和用戶自己建立的變數。
JavaScript
變數
正如代數一樣,JavaScript 變數用於保存值或表達式。
可以給變數起一個簡短名稱,比如 x,或者更有描述性的名稱,比如 length。
JavaScript 變數也可以保存文本值,比如 carname="Volvo"。
變數名稱的規則
變數對大小寫敏感(y 和 Y 是兩個不同的變數)
變數必須以字母或下劃線開始
注釋:由於 JavaScript 對大小寫敏感,變數名也對大小寫敏感。
實例
在腳本執行的過程中,可以改變變數的值。可以通過其名稱來引用一個變數,以此顯示或改變它的值。
本例為您展示原理。
聲明(創建) JavaScript 變數
在 JavaScript 中創建變數經常被稱為“聲明”變數。
您可以通過 var 語句來聲明 JavaScript 變數:
var x; var carname;
var x; var carname;
在以上聲明之後,變數並沒有值,不過您可以在聲明它們時向變數賦值:
var x = 5; var carname = "Volvo";
var x = 5; var carname = "Volvo";
注釋:在為變數賦文本值時,請為該值加引號。
向 JavaScript 變數賦值
通過賦值語句向 JavaScript 變數賦值:
x = 5; carname = "Volvo";
x = 5; carname = "Volvo";
變數名在 = 符號的左邊,而需要向變數賦的值在 = 的右側。
在以上語句執行後,變數 x 中保存的值是 5,而 carname 的值是 Volvo。
向未聲明的 JavaScript變數賦值
如果您所賦值的變數還未進行過聲明,該變數會自動聲明。
這些語句:
x = 5; carname = "Volvo";
x = 5; carname = "Volvo";
與這些語句的效果相同:
var x = 5; var carname = "Volvo";
var x = 5; var carname = "Volvo";
重新聲明 JavaScript變數
如果您再次聲明了 JavaScript 變數,該變數也不會丟失其原始值。
var x = 5; var x;
var x = 5; var x;
在以上語句執行後,變數 x 的值仍然是 5。在重新聲明該變數時,x 的值不會被重置或清除。
JavaScript算術
正如代數一樣,您可以使用 JavaScript 變數來做算術:
y = x - 5; z = y + 5;
y = x - 5; z = y + 5
php中的變數類型
PHP 中的變數:變數用於存儲值,比如數字、文本字元串或數組。
一旦設置了某個變數,我們就可以在腳本中重復地使用它。
PHP 中的所有變數都是以 $ 符號開始的。
在 PHP 中設置變數的正確方法是:
$var_name = value;PHP 的入門者會忘記在變數的前面的 $ 符號。如果那樣做的話,變數將是無效的。
我們創建一個存有字元串的變數,和一個存有數值的變數:
不必向 PHP 聲明該變數的數據類型。
根據變數被設置的方式,PHP 會自動地把變數轉換為正確的數據類型。
在強類型的編程語言中,您必須在使用前聲明變數的類型和名稱。
在 PHP 中,變數會在使用時被自動聲明。
php 中的變數用一個美元符號後面跟變數名來表示。變數名是區分大小寫的。
變數名與 php 中其它的標簽一樣遵循相同的規則。一個有效的變數名由字母或者下劃線開頭,後面跟上任意數量的字母,數字,或者下劃線。按照正常的正則表達式,它將被表述為:'[a-zA-Z_/x7f-/xff][a-zA-Z0-9_/x7f-/xff]*'。
注: 在此所說的字母是 a-z,A-Z,以及 ASCII 字元從 127 到 255(0x7f-0xff)。
php 3 中,變數總是傳值賦值。那也就是說,當將一個表達式的值賦予一個變數時,整個原始表達式的值被賦值到目標變數。這意味著,例如,當一個變數的值賦予另外一個變數時,改變其中一個變數的值,將不會影響到另外一個變數。有關這種類型的賦值操作,請參閱表達式一章。
php 4 提供了另外一種方式給變數賦值:引用賦值。這意味著新的變數簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變數。改動新的變數將影響到原始變數,反之亦然。這同樣意味著其中沒有執行復制操作;因而,這種賦值操作更加快速。不過只有在密集的循環中或者對很大的數組或對象賦值時才有可能注意到速度的提升。
使用引用賦值,簡單地將一個 & 符號加到將要賦值的變數前(源變數)。例如,下列代碼片斷將輸出“My name is Bob”兩次:
有一點重要事項必須指出,那就是只有有名字的變數才可以引用賦值。
變數的命名規則:
變數名必須以字母或下劃線 "_" 開頭。
變數名只能包含字母數字字元以及下劃線。
㈥ C語言的文件類型有哪些
從文件編碼的方式來看,文件可分為ASCII碼文件和二進制文件兩種。
文件是指記錄在介質(磁碟、磁帶、光碟、u盤等)上的相關數據的集合。每個數據都有一個名稱,稱為文件名,它是訪問文件的標識,
ASCII碼文件也稱為文本文件,這種文件在磁碟中存放時每個字元對應一個位元組,用於存放對應的ASCII碼值。ASCII碼文件可在屏幕上按字元顯示的,例如源程序文件就是ASCII碼文件,由於按字元顯示,可以識別。
二進制文件是按二進制的編碼方式來存放文件的,二進制文件雖然也可以在屏幕上顯示,但其內容顯示為亂碼。
C語言在處理這些文件時,並不區分類型,都視為字元流,按位元組處理。
㈦ C語言中有哪些存儲類型
Turbo C2.0支持四種變數存儲類型。說明符如下:
auto static extern register
下面分別來介紹。
一、auto
auto稱為自動變數。
局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進
行說明, 當auto省略時, 所有的非全程變數都被認為是局部變數, 所以auto實際上
從來不用。
局部變數在函數調用時自動產生, 但不會自動初始化, 隨函數調用的結束, 這
個變數也就自動消失了, 下次調用此函數時再自動產生, 還要再賦值, 退出時又自
動消失。
二、static
static稱為靜態變數。根據變數的類型可以分為靜態局部變數和靜態全程變數。
1. 靜態局部變數
它與局部變數的區別在於: 在函數退出時, 這個變數始終存在, 但不能被其它
函數使用, 當再次進入該函數時, 將保存上次的結果。其它與局部變數一樣。
2. 靜態全程變數
Turbo C2.0允許將大型程序分成若干獨立模塊文件分別編譯, 然後將所有模塊
的目標文件連接在一起, 從而提高編譯速度, 同時也便於軟體的管理和維護。靜態
全程變數就是指只在定義它的源文件中可見而在其它源文件中不可見的變數。它與
全程變數的區別是: 全程變數可以再說明為外部變數(extern), 被其它源文件使用,
而靜態全程變數卻不能再被說明為外部的, 即只能被所在的源文件使用。
三、extern
extern稱為外部變數。為了使變數除了在定義它的源文件中可以使用外, 還要
被其它文件使用。因此, 必須將全程變數通知每一個程序模塊文件, 此時可用
extern來說明。
四、register
register稱為寄存器變數。它只能用於整型和字元型變數。定義符register說
明的變數被Turbo C2.0存儲在CPU的寄存器中, 而不是象普通的變數那樣存儲在內
存中, 這樣可以提高運算速度。但是Turbo C2.0隻允許同時定義兩個寄存器變數,
一旦超過兩個, 編譯程序會自動地將超過限制數目的寄存器變數當作非寄存器變數
來處理。因此, 寄存器變數常用在同一變數名頻繁出現的地方。
另外, 寄存器變數只適用於局部變數和函數的形式參數, 它屬於auto型變數,
因此, 不能用作全程變數。定義一個整型寄存器變數可寫成:
register int a;
對於以上所介紹的變數類型和變數存儲類型將會在以後的學習中, 通過例行程
序中的定義、使用來逐漸加深理解。
㈧ 依據對文件中數據的組織形式,C語言中的文件類型可分為哪兩種
ASCII 文件和二進制文件兩種。字元文件中的字元又是用ASCII碼來表示的,因此也叫ASCII文件,二進制文件就是用二進制數來表示的。
㈨ C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍
在C語言中,對變數的存儲類型說明有以下四種:
1、auto 自動變數
2、register 寄存器變數
3、extern 外部變數
4、static 靜態變數
所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。
變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。
1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。
2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。
如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。
(9)c語言中文件域可變類型擴展閱讀:
變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。
一、從作用域看:
1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。
2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。
3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。
4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。
二、從分配空間看:
全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。
全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。
而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。
1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。
2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。
參考資料來源:網路-變數-存儲類型