愛伊米

Arduino--語法08

十二、資料型別轉換

12.1  char()

描述:將一個變數的型別變為char。

語法:

char(x)

引數:

x:任何型別的值

返回

char

12.2  byte()

描述:將一個值轉換為位元組型數值

語法:

byte(x)

引數:

X:任何型別的值

返回

位元組

12.3  int()

描述:

將一個值轉換為int型別。

語法:

int(x)

引數:

x:一個任何型別的值

返回值

int型別的值

12.4  word()

描述:

把一個值轉換為word資料型別的值, 或由兩個位元組建立一個字元。

語法:

word(x)

word(h, l)

引數

X:任何型別的值

H:高階(最左邊)位元組

L:低序(最右邊)位元組

返回值

字元

12.5  long()

描述:

將一個值轉換為長整型資料型別。

語法:

long(x)

引數:

x:任意型別的數值

返回值

長整型數

12.6  float()

描述:

將一個值轉換為float型數值。

語法:

float(x)

引數:

X:任何型別的值

返回值

float型數

註釋:

見float中關於Arduino浮點數的精度和限制的詳細資訊。

十三、變數作用域&修飾符

13.1 variable scope(變數的作用域)

變數的作用域

在Arduino使用的C程式語言的變數, 有一個名為作用域(scope) 的屬性。這一點與類似BASIC的語言形成了對比, 在BASIC語言中所有變數都是全域性(global) 變數。

在一個程式內的全域性變數是可以被所有函式所呼叫的。區域性變數只在宣告它們的函式內可見。在Arduino的環境中, 任何在函式(例如, setup() , loop() 等) 外宣告的變數, 都是全域性變數。

當程式變得更大更復雜時,區域性變數是一個有效確定每個函式只能訪問其自己變數的途徑。這可以防止,當一個函式無意中修改另一個函式使用的變數的程式錯誤。

有時在一個for迴圈內宣告並初始化一個變數也是很方便的選擇。這將建立一個只能從for迴圈的括號內訪問的變數。

13.2 static(靜態變數)

static關鍵字用於建立只對某一函式可見的變數。然而, 和區域性變數不同的是, 區域性變數在每次呼叫函式時都會被建立和銷燬,靜態變數在函式呼叫後仍然保持著原來的資料。

靜態變數只會在函式第一次呼叫的時候被建立和初始化。

13.3 volatile

volatile這個關鍵字是變數修飾符, 常用在變數型別的前面, 以告訴編譯器和接下來的程式怎麼對待這個變數。

宣告一個volatile變數是編譯器的一個指令。編譯器是一個將你的C/C++程式碼轉換成機器碼的軟體, 機器碼是arduino上的At mega晶片能識別的真正指令。

具體來說, 它指示編譯器編譯器從RAM而非儲存暫存器中讀取變數, 儲存暫存器是程式儲存和操作變數的一個臨時地方。在某些情況下,儲存在暫存器中的變數值可能是不準確的。

如果一個變數所在的程式碼段可能會意外地導致變數值改變那此變數應宣告為volatile, 比如並行多執行緒等。在arduino中, 唯一可能發生這種現象的地方就是和中斷有關的程式碼段, 成為中斷服務程式。

13.4 const

const關鍵字代表常量。它是一個變數限定符, 用於修改變數的性質, 使其變為只讀狀態。這意味著該變數, 就像任何相同型別的其他變數一樣使用, 但不能改變其值。如果嘗試為一個const變數賦值,編譯時將會報錯。

const關鍵字定義的常量, 遵守variables coping管轄的其他變數的規則。這一點加上使用#define的缺陷, 使const關鍵字成為定義常量的一個的首選方法。

#define或const

您可以使用const或#define建立數字或字串常量。但arrays, 你只能使用const。一般const相對的#define是首選的定義常量語法。

十四、輔助工具

14.1 sizeof()

描述:

sizeof運算子返回一個變數型別的位元組數, 或者該數在陣列中佔有的位元組數。

語法:

引數:

variable:任何變數型別或陣列(如int, float, byte)

示例程式碼:

sizeof運算子用來處理陣列非常有效, 它能很方便的改變陣列的大小而不用破壞程式的其他部分。

這個程式一次打印出一個字串文字的字元。嘗試改變一下字串。

請注意sizeof返回位元組數總數。因此, 較大的變數型別, 如整數, for迴圈看起來應該像這樣。