在之前的學習(xi) 中,我們(men) 簡單介紹了Arduino的數據類型,下麵一起來學習(xi) Arduino的變量和常量。首先是變量,在開始了解變量之前,理解變量的範圍是非常重要的。
什麽是變量範圍?Variable Scope
Arduino使用的 C 語言變量中有一個(ge) 名為(wei) scope的屬性。scope 也就是範圍是程序的一部分,變量又分為(wei) 三種類型,分別是:
- 在函數或塊內部的變量,稱為局部變量。
- 在函數參數中定義的變量,稱為形參。
- 在所有函數之外定義的變量,它被稱為全局變量。
局部變量 Local Variables
在函數或區塊中聲明的變量是局部變量。它們(men) 隻能由位於(yu) 函數或代碼塊內(nei) 的語句使用,局部變量不會(hui) 在函數或代碼塊之外起作用。 下麵是使用局部變量的示例 :
Void setup () { } Void loop () { int x , y ; int z ; //聲明局部變量 x = 0; y = 0; //實際參數 z = 10; }
全局變量 Global Variables
全局變量在所有函數之外進行定義(yi) ,通常在程序的頂部區域。全局變量將在程序的整個(ge) 生命周期中發揮作用。全局變量一旦定義(yi) ,任何函數都可以訪問和使用它,也就是說,一個(ge) 全局變量在聲明之後在整個(ge) 程序中都可以使用。下麵的示例使用了全局變量和局部變量 :
Int T , S ; float c = 0 ; //聲明全局變量; Void setup () { } Void loop () { int x , y ; int z ; //聲明局部變量 x = 0; y = 0; //實際參數 z = 10; }
形式參數 formal parameter
在函數定義(yi) 中出現的參數可以看做是一個(ge) 占位符,它沒有數據,隻能等到函數被調用時接收傳(chuan) 遞進來的數據,所以稱為(wei) 形式參數,簡稱形參。 形參變量隻有在函數被調用時才會(hui) 分配內(nei) 存,調用結束後,立刻釋放內(nei) 存,所以形參變量隻有在函數內(nei) 部有效,不能在函數外部使用。
實際參數 actual parameter
實參本身不屬於(yu) 變量範疇,它是函數被調用時給出的參數包含了實實在在的數據,會(hui) 被函數內(nei) 部的代碼使用,所以稱為(wei) 實際參數,簡稱實參。實參可以是常量、變量、表達式、函數等,無論實參是何種類型的數據,在進行函數調用時,它們(men) 都必須有確定的值,以便把這些值傳(chuan) 送給形參,所以應該提前用賦值、輸入等辦法使實參獲得確定值。
形參和實參的聯係
實參和形參在數量上、類型上、順序上必須嚴(yan) 格一致,否則會(hui) 發生“類型不匹配”的錯誤。當然,如果能夠進行自動類型轉換,或者進行了強製類型轉換,那麽(me) 實參類型也可以不同於(yu) 形參類型。
函數調用中發生的數據傳(chuan) 遞是單向的,隻能把實參的值傳(chuan) 遞給形參,而不能把形參的值反向地傳(chuan) 遞給實參;換句話說,一旦完成數據的傳(chuan) 遞,實參和形參就再也沒有瓜葛了,所以,在函數調用過程中,形參的值發生改變並不會(hui) 影響實參。
請看下麵的例子:
#include <stdio.h> /* *計算從(cong) m加到n的值 */ int sum(int m, int n) { int i; for (i = m+1; i <= n; ++i) { m += i; } return m; } int main() { int a, b, total; printf("Input two numbers: "); scanf("%d %d", &a, &b); total = sum(a, b); printf("a=%d, b=%d\n", a, b); printf("total=%d\n", total); return 0; }
在這段代碼中,函數定義(yi) 處的 m、n 是形參,函數調用處的 a、b 是實參。通過 scanf() 可以讀取用戶輸入的數據,並賦值給 a、b,在調用 sum() 函數時,這份數據會(hui) 傳(chuan) 遞給形參 m、n。