字串 (strings)
一串英文字母(字元)Character,可以表示一個英文字word,利用字元陣列可以容納組成文字的字元群。然而不同英文字的字元數目可能並不相同,為了確保字串能夠容納所有的文字,需要有一個可容納最大字元數目的字母陣列來存放,同時為了確認己存入字元陣列中的文字的字元串己經結束,在字元串結束之後需要提供一個結束文字字元串的標記符號。
C語言中文字字串存放在字元陣列之中並且以空字元(Null)為結束字元。空字元一般會以 '\0' 來表示,在大部份的C語言中它是0。由於字串是由空字元來結束,所以在宣告用來存放字串的陣列元素數目需要比實際要存字串的字元數多1。在C語言中沒有字串型態的變數,而是以字元陣列來代替,但它仍然提供了表達文字字串的文字常數表示法
例如:
“hello”,
字串常數的結束用空字元,雖然未顯示出來,但C編譯器會自動加進實際字串的後面再存入記憶體中。如
C語言經常需要處理文字字串,所以它本身被設計成非常擅長於字串處理,提供了非常多的字串處理函式放在函式館中以供使用,讓程式設計師可以很方便的寫出能夠透過控制台與程式使用者溝通的程式,但本課程重點在於微控制器如何控制電路硬體以便控制機器,複雜的人機介面開發並不是本課程的重點,所以不多做介紹。
陣列初始化
陣列是許多變數的集合,如同先前課程一般變數的介紹,變數是存放可變數值的記憶體空間,這個記憶空間原本存放的值是什麼我們並不知道,為了有確認開始執行時,它有明確的開始值即初值,需要有一個初始化的動作,把常數值寫進去這個變數。陣列因為有多個值,所以要有等數量的常數來初始它的內容元素。
雖然前面課程有說明過如何使用for迴圈來填寫陣列內容以達到初始化的目的,但實際陣列的初始化,可以與一般單一變數一樣,在定義的同時初始化,而且這方式的初始化,更簡單明白 。
type-specifier array_name[size1][size2]={{value-list for row1},..{value-list for rowN}};
二維陣列,把陣列視為一維向量的集合,其value-list for rowN 列出各個一維向量的初始值列表,集合各個向量初始值列表並以外部大括號括起來,即得二維陣列的初始值列表。例如:
int squal[5][2]={{1,1},{2,4},{3,9},{4,16},{5,25}};
C語言非常聰明有彈性,如果程式宣告陣列時,有提供初始化列表,則C編輯器能夠自動偵測列表的元素多少,自動產生正好夠大陣列大小來容納這些初始值,並完成尺寸的訂定,如果要這樣做時,只要在中括號內留白即可。例如:
int squal[][]={{1,1}, {2,4}, {3,9}, {4,16}, {5,25}};
這種彈性的原始需求來自於字串處理,在C語言中可能有一些警告字串,這些字串的長度變化很多不固定,每一個字串去數它的字元數目是一個很煩的工作。 如:
Char e1[14]= “Divided by 0\n”;
Char e2[23]= “End-of-File\n”;
Char e3[21]= “Access Dennied\n”;
有了自動偵測,會變得很方便:
Char e1[]= “Divided by 0\n”;
Char e2[]= “End-of-File\n”;
Char e3[]= “Access Dennied\n”;