數(shù)組
- 只能存儲(chǔ)一個(gè)所聲明的數(shù)據(jù)類(lèi)型的數(shù)值的變量稱(chēng)為原子變量(atomic variable)或標(biāo)量變量(scalar variable)
- 一種可以存儲(chǔ)獲取數(shù)據(jù)的方法是使用數(shù)據(jù)結(jié)構(gòu)(data structure)或者叫聚合數(shù)據(jù)類(lèi)型(aggregate data type)
-
數(shù)組(array)是最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)
一維數(shù)組
- 由相同數(shù)據(jù)類(lèi)型的單一項(xiàng)目組成的數(shù)組稱(chēng)為一維數(shù)組
- C語(yǔ)言數(shù)組的開(kāi)始索引值總是0,并且不能改變
- C語(yǔ)言并不檢查正在使用的索引數(shù)值(即邊界檢查).例如,使用超出聲明數(shù)組長(zhǎng)度的索引值,編譯器不會(huì)通報(bào)這個(gè)錯(cuò)誤
數(shù)組初始化
- 聲明語(yǔ)句中沒(méi)有給出特定的初始化,所有的數(shù)字?jǐn)?shù)組元素都會(huì)被設(shè)置為0
int distance[100]; //所有元素都為0
- 當(dāng)初始化數(shù)值包含在聲明語(yǔ)句中時(shí),數(shù)組的大小可以省略
int gallons[ ] = {1,2,3,4,5};
int gallons[6] = {1,2,3,4,5}; //兩個(gè)數(shù)組是相等的
- 初始化字符數(shù)組時(shí),可以使用包含在雙引號(hào)中的字符序列
char codes[] = "sample";
- 對(duì)于字符數(shù)組來(lái)說(shuō),最后一個(gè)字符為空字符(NULL),由C編譯器自動(dòng)地追加到所有的字符串后面用來(lái)標(biāo)記一個(gè)字符串的結(jié)束;并且這個(gè)字符在內(nèi)部存儲(chǔ)代碼數(shù)值上等于0(字符0在內(nèi)部存儲(chǔ)代碼數(shù)值上等于48,因此兩者不會(huì)被混淆)
數(shù)組作為函數(shù)實(shí)參
- 當(dāng)數(shù)組作為函數(shù)實(shí)參傳入函數(shù)時(shí),只是將數(shù)組第一個(gè)元素的地址傳入函數(shù),并不會(huì)生成將實(shí)參數(shù)組復(fù)制給形參
void findmax(int vals[]); //可選的函數(shù)首部行
二維數(shù)組
int val[3][4]; //二維數(shù)組聲明
int val[3][4] = { {1,2,3,4},
{5,6,7,8},
{9,10,11,12} }; //初始化,用多個(gè)括號(hào)分開(kāi)
int val[3][4] = { 1,2,3,4,
5,6,7,8,
9,10,11,12 }; //內(nèi)部括號(hào)可以省略
int val[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //分行也不是必須的,但是是一種好的編程習(xí)慣
字符串
基礎(chǔ)
庫(kù)函數(shù)
輸入數(shù)據(jù)驗(yàn)證
格式化字符串
數(shù)據(jù)文件
聲明,打開(kāi)與關(guān)閉文件流
-
文件流(file stream)是用于連接存儲(chǔ)在物理設(shè)備上的文件到一個(gè)程序的單向傳輸路徑;從一個(gè)文件接收數(shù)據(jù)到一個(gè)程序的文件流稱(chēng)為輸入文件流(input file stream);發(fā)送(即寫(xiě)入)數(shù)據(jù)到一個(gè)文件的文件流稱(chēng)為輸出文件流(output file stream)
- 聲明文件流是通過(guò)聲明一個(gè)有FILE類(lèi)型的變量名(指針)來(lái)實(shí)現(xiàn)的
FILE *inFile; //一個(gè)例子
- 打開(kāi)文件流:打開(kāi)函數(shù)稱(chēng)為fopen(),參數(shù)為文件的外部名,以及文件要被使用的模式;允許的模式有r,w或a,分別代表讀、寫(xiě)或附加
inFile = fopen("prices.bnd", "r"); //一個(gè)例子
fclose(inFile);
讀取和寫(xiě)入文本文件
fputc(c, filename) //把一個(gè)字符寫(xiě)入文件
fputs(string, filename) //把一個(gè)字符串寫(xiě)入文件
fprintf(filename, "format", args) //按照格式把一個(gè)參數(shù)的數(shù)值寫(xiě)入文件
fgetc(filename) //從文件中讀取一個(gè)字符
fgets(stringname, n, filename) //從文件讀取n-1個(gè)字符并把字符存儲(chǔ)在給定的字符串名中
fscanf(filename, "format", &args) //根據(jù)這個(gè)格式,從文件讀取所列出的參數(shù)值
- 我們目前使用的數(shù)據(jù)文件指針都是邏輯文件指針,也就是指向數(shù)據(jù)文件;C語(yǔ)言還支持物理文件指針,即指向一個(gè)硬件設(shè)備,例如鍵盤(pán)、顯示器或打印機(jī);例如在程序中遇到一個(gè)scanf()函數(shù)調(diào)用時(shí),計(jì)算機(jī)自動(dòng)轉(zhuǎn)向標(biāo)準(zhǔn)輸入文件也就是鍵盤(pán)來(lái)獲得輸入的內(nèi)容;遇到一個(gè)printf()函數(shù)時(shí),計(jì)算機(jī)將內(nèi)容寫(xiě)入標(biāo)準(zhǔn)輸出文件指派的設(shè)備,對(duì)于大多數(shù)系統(tǒng)而言是顯示器
- 從上,我們可以得知printf(),scanf()分別是fprintf(),fscanf()函數(shù)的特例
fprintf(stdout, "Hello World");
printf("Hello World"); //兩個(gè)語(yǔ)句等價(jià)
fscanf(stdin, "%d", &num);
scanf("%d", &num); //兩個(gè)語(yǔ)句等價(jià)
隨機(jī)文件訪問(wèn)
傳遞和返回文件名
寫(xiě)入和讀取二進(jìn)制文件