指標部分:
1.指標型別說明
main()2.指標加減運算說明
/* 指標的加減運算(只能對陣列指標進行,其他型別的指標變數是無意義的) */3.結構體int *pt;
pt = pa+1; /* 陣列後移一位 */
pt = pa-1; /*陣列前移一位 */
pt = pa++;
pt = pa--;
pt = ++pa;
pt = --pt;
/* (在陣列中!)兩個指標變數可以相減,但不能相加!! */
int *p1,*p2;
p1 = array;
p2 = &array[3];
int num = p2 - p1; /* 代表兩指標在陣列中相隔的元素個數,(p2位址-p1位址)/單個元素長度 */
//printf("%d\n",num); will print "3"
#includestruct stu;4.記憶體管理函式struct stu boy1,boy2;
//#define stu struct stu 利用巨集來定義乙個符號常量
/* 上述**也可用以下方式表示
struct stuboy1,boy2;
*///結構變數成員的引用是:結構變數名.成員名
//結構陣列
struct stu boy[5];
struct stu *pstu;
//賦值 pstu = &boy1
//訪問形式:(*pstu).成員名 或 pstu->num
//作為引數時,結構變數會將全部成員逐個傳送,開銷很大。最好用結構指標變數,只會傳送位址
a.分配記憶體空間函式 malloc
呼叫形式:(型別說明符 *) malloc(size)
b.分配記憶體空間函式 calloc
呼叫形式: (型別說明符 *) calloc(n,size)
在記憶體動態儲存區分配n塊長度為size位元組的連續區域。
c.重分配記憶體空間函式 realloc
呼叫形式:(型別說明符 *) realloc(mem_address, newsize)
更改以前分配區的長度(增加或減少)。當增加長度時,可能需將以前分配區的內容移到另乙個足夠大的區域,而新增區域內的初始值則不確定
d.釋放記憶體空間函式 free (注意:對於a,b,c分配的記憶體,不再用時,必須用free函式釋放)
呼叫形式:free(void *ptr)
5.列舉型別
定義:enum enumname;
或通過 typedef 來定義:
typedef enum [enumname][enumtypename]; //這裡的enumtypename和第一行的enumname,兩者選一,或兩者都存在,都是可以的列舉型是乙個集合,集合中的元素(列舉成員)是一些命名的整型常量,預設第乙個為值為0,也可在定義時賦值,如:
enum enumname; 則往後遞增值。
賦值:
enum enumname varname;link: ,有更詳細說明。varname = var1;
6.檔案
從使用者角度分,普通檔案和裝置檔案。
從檔案編碼分,ascii檔案和二進位制檔案。ascii檔案每個字元對應乙個位元組。
檔案指標在c語言中用乙個指標變數指向乙個檔案。定義:
file *fp;檔案操作由庫函式完成,主要有:
檔案開啟函式:
檔案指標名 = fopen(檔名, 使用檔案方式);檔案使用方式有:
"rt" rt+ wt wt+ at at+
"rb" rb+ wb wb+ ab ab+
其中 t 代表文字檔案(可不寫),b 代表二進位制檔案。但在操作時會把文字檔案轉成二進位制再讀寫,所以文字檔案效率較低
開啟檔案常用**:
if((fp = fopen("c:\\tmp.txt","rb") == null)
檔案關閉函式:
fclose(檔案指標);正常關閉返回0,返回非0則出錯。
檔案讀寫函式:
a.讀字元函式 fgetc
ch = fgetc(fp);b.寫字元函式 fputc
fputc(字元量, 檔案指標);c.字串讀寫函式 fgets 和 fputs
讀字串函式 fgets 從指定的檔案中讀字串到字元陣列中。
fgets(字元陣列名, n , 檔案指標);n表示從檔案中讀出字串不超過n-1個字元。在讀入最後乙個字元後加上串結束標誌'\0'。
在讀出n-1個字元前,如遇到換行符或eof,則結束讀操作,返回值是字元陣列的首位址。
寫字串函式 fputs
fputs(字串, 檔案指標);d.資料塊讀寫函式 fread 和 fwrite
fread(buffer, size, count, fp);buffer 是指標,存放待讀寫資料的首位址;size 是資料塊的位元組數; count 表示要讀寫的資料塊塊數。 fp 表示檔案指標。fwrite(buffer, size, count, fp);
例如:fread(buf, 4, 5, fp); 代表從fp所指檔案中,每次讀4個位元組(乙個實數)送入實陣列buf中,連續讀5次,即讀5個例項到buf中。
e.格式化讀寫 fscanf 和 fprintf
fscanf(檔案指標, 格式字串, 輸入表列);f. 檔案隨機讀寫 rewind 和 fseekfprintf(檔案指標, 格式字串, 輸出表列);
例如: fscanf(fp, "%d%s", &i,s);
rewind(檔案指標); //把檔案內部的位置指標移到檔案首。
fseek(檔案指標, 位移量, 起始點); //位移量指移動位元組數,long。起始點有三種:檔案首,當前位,檔案尾,分別用數字0,1,2表示。另fseek一般用於二進位制檔案,因為在文字檔案中要進行轉換,計算位置常出錯。
另:int sscanf(const char *buffer,const char *format[,argument ]...);
buffer 儲存的資料 format 格式控制字串 argument 選擇性設定字串 sscanf會從buffer裡讀進資料,依照argument的設定將資料寫回。
int sprintf( char *buffer, const char *format [, argument] … );
返回值:字串長度(strlen)
《c程式語言》筆記
1.8
當把陣列名作為引數時,傳遞給函式的值是陣列的起始元素的位置或位址--並不複製陣列本身,在被呼叫的函式中,可以通過陣列下標訪問或修改陣列元素的值。
1.10
在函式內部定義的 int a; 稱為自動變數(區域性變數)。
在函式外定義的 int b; 稱為外部變數,其值在程式執行期間一直存在,可在全域性範圍內訪問。每個訪問外部變數的函式,需要宣告相應的外部變數。宣告時可顯式宣告(extern int b),也可通過上下文隱式宣告(在同一原始檔中,如果外部變數的定義出現在它的函式之前,那麼可以不用extern)。如果外部變數在file1定義,file2和file3要用extern宣告。
人們通常把變數和函式的extern宣告放在乙個單獨的檔案中(標頭檔案 .h)。
定義:define,表示建立變數或分配儲存單元。
宣告:declaration,說明變數的性質,但並不分配單元。
2.1c語言只提供了四種基本型別:char int float double。(short和long是限定符)
儲存字串的物理儲存單元數比括在括號中的字元數多乙個。
列舉是乙個常量整型值的列表。例如:enum boolean;(預設no 為0,yes為1)
列舉為建立常量值與名字之間的關聯提供一種便得的方式。
const限定符:指定變數的值不能修改。對陣列而言,指定陣列的所有元素的值都不能修改。
C語言 C語言複習筆記
為什麼要學c語言?1972年,美國貝爾實驗室的 d.m.ritchie 在b語言的基礎上最終設計出了一種新的語言,他取了bcpl的第二個字母作為這種語言的名字,這就是c語言。總所周知,任何東西的盛行都只是乙個階段,語言也是如此。但是,c語言是個例外,乙個矗立了半個世紀的語言,其中好壞,我想應該不難了...
C語言複習筆記
前言 本篇是個人複習基礎知識過程中遇到一些容易混淆的點在此記錄,如有錯誤請指正。如 int 9在的原碼為 0 0 0 1 1 0 0 0 9的補碼為 1 1 1 0 0 1 1 1 1 1 1 1 0 1 0 0 0 比如 int x y z 一般來說編譯器會把這三個變數分配到一段連續的記憶體裡。但...
C語言複習筆記(三)
1 複習指標與陣列 參考2 選擇排序法講解 歸納 1 把0座標的元素與右邊最小的乙個元素交換,達到效果最小的放到0位置 2 把1座標的元素與右邊最小乙個元素交換,達到效果,第2小的放到1位置 3 把2座標的元素與右邊最小的乙個元素交換,達到效果,第3小的放到2位置 以此類推 3 氣泡排序 歸納 兩兩...