c語言複習筆記

2021-08-31 21:54:52 字數 4056 閱讀 6107

指標部分:

1.指標型別說明

main()
2.指標加減運算說明

/* 指標的加減運算(只能對陣列指標進行,其他型別的指標變數是無意義的) */

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"

3.結構體

#includestruct stu;

struct stu boy1,boy2;

//#define stu struct stu 利用巨集來定義乙個符號常量

/* 上述**也可用以下方式表示

struct stuboy1,boy2;

*///結構變數成員的引用是:結構變數名.成員名

//結構陣列

struct stu boy[5];

struct stu *pstu;

//賦值 pstu = &boy1

//訪問形式:(*pstu).成員名 或 pstu->num

//作為引數時,結構變數會將全部成員逐個傳送,開銷很大。最好用結構指標變數,只會傳送位址

4.記憶體管理函式

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;

varname = var1;

link: ,有更詳細說明。

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);

fwrite(buffer, size, count, fp);

buffer 是指標,存放待讀寫資料的首位址;size 是資料塊的位元組數; count 表示要讀寫的資料塊塊數。 fp 表示檔案指標。

例如:fread(buf, 4, 5, fp); 代表從fp所指檔案中,每次讀4個位元組(乙個實數)送入實陣列buf中,連續讀5次,即讀5個例項到buf中。

e.格式化讀寫 fscanf 和 fprintf

fscanf(檔案指標, 格式字串, 輸入表列);

fprintf(檔案指標, 格式字串, 輸出表列);

例如: fscanf(fp, "%d%s", &i,s);

f. 檔案隨機讀寫 rewind 和 fseek

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 氣泡排序 歸納 兩兩...