C語言一些個人小筆記(僅供自己參考)

2021-08-25 07:57:02 字數 4595 閱讀 3254

1. c語言允許直接訪問實體地址,能進行位(bit)操作,能實現組合語言的大部分功能,可以直接對硬體進行操作。因此有人把它稱為中級語言

2. 資料型別可分為:基本資料型別,構造資料型別,指標型別,空型別void四大類。

3.計算機中的原碼、反碼和補碼

總結一下,計算機儲存有符號的整數時,是用該整數的補碼進行儲存的,0的原碼、補碼都是0,正數的原碼、補碼可以特殊理解為相同,負數的補碼是它的反碼加1

比如11111111是-1,10000000是-128

4,。字串常量佔的記憶體位元組數等於字串中位元組數加1。增加的乙個位元組中存放字元"\0" (ascii碼為0)。這是字串結束的標誌。

5,指標運算子:用於取內容(*)和取位址(&)二種運算。

例如:&a, &b

分別表示變數a和變數b 的位址

6,printf();

7, scanf中要求給出變數位址,如給出變數名則會出錯。如 scanf("%d",a);是非法的,應改為scanf("%d",&a);才是合法的。

如果格式控制串中有非格式字元則輸入時也要輸入該非格式字元。

例如:scanf("%d,%d,%d",&a,&b,&c);

其中用非格式符「 , 」作間隔符,故輸入時應為:

5,6,7

又如:scanf("a=%d,b=%d,c=%d",&a,&b,&c);

則輸入應為:

a=5,b=6,c=7

8,表示式1? 表示式2: 表示式3

9,素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。

素數就是質數

10, 可以看出當輸入的字串中含有空格時,輸出仍為全部字串。說明gets函式並不以空格作為字串輸入結束的標誌,而只以回車作為輸入結束。這是與scanf函式不同的。

11,字串連線函式strcat

格式: strcat (字元陣列名1,字元陣列名2)

12, 字串拷貝函式strcpy

格式: strcpy (字元陣列名1,字元陣列名2)

13,字串比較函式strcmp

格式: strcmp(字元陣列名1,字元陣列名2)

14,測字串長度函式strlen

格式: strlen(字元陣列名)

功能:測字串的實際長度(不含字串結束標誌『\0』) 並作為函式返回值。

15,main 函式是主函式,它可以呼叫其它函式,而不允許被其它函式呼叫。因此,c程式的執行總是從main函式開始,完成對其它函式的呼叫後再返回到main函式,最後由main函式結束整個

程式。乙個c源程式必須有,也只能有乙個主函式main。

16,。函式定義和函式說明

可以看出函式說明與函式定義中的函式頭部分相同,但是末尾要加分號。

在主調函式中呼叫某函式之前應對該被調函式進行說明(宣告),這與使用變數之前要先進行變數說明是一樣的。在主調函式中對被調函式作說明的目的是使編譯系統知道被調函式返回值的

型別,以便在主調函式中按此種型別對返回值作相應的處理。

當被調函式的函式定義出現在主調函式之前時,在主調函式中也可以不對被調函式再作說明而直接呼叫。

17,形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。函式呼叫結束返回主調函式後則不能再使用該形參變數。

的巢狀呼叫。即在被調函式中又呼叫其它函式。這與其它語言的子程式巢狀的情形是類似的。

19,乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式

20, 前面已經介紹了,從變數的作用域(即從空間)角度來分,可以分為全域性變數和區域性變數。

從另乙個角度,從變數值存在的作時間(即生存期)角度來分,可以分為靜態儲存方式和動態儲存方式。

靜態儲存方式:是指在程式執行期間分配固定的儲存空間的方式。

動態儲存方式:是在程式執行期間根據需要進行動態的分配儲存空間的方式。

使用者儲存空間可以分為三個部分:

1) 程式區;

2) 靜態儲存區;

3) 動態儲存區;

全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。在程式執行過程中它們佔據固定的儲存單元,而不動態地進行分配和釋放;

動態儲存區存放以下資料:

1) 函式形式引數;

2) 自動變數(未加static宣告的區域性變數);

3) 函式呼叫實的現場保護和返回位址;

對以上這些資料,在函式開始呼叫時分配動態儲存空間,函式結束時釋放這些空間。

21. auto變數& static變數

22,register變數

為了提高效率,c語言允許將區域性變數得值放在cpu中的暫存器中,這種變數叫「暫存器變數」,用關鍵字register作宣告。

說明:1) 只有區域性自動變數和形式引數可以作為暫存器變數;

2) 乙個計算機系統中的暫存器數目有限,不能定義任意多個暫存器變數;

3) 區域性靜態變數不能定義為暫存器變數。

23,用extern宣告外部變數

24,預處理部分

所謂預處理是指在進行編譯的第一遍掃瞄(詞法掃瞄和語法分析)之前所作的工作。

c語言提供了多種預處理功能,如巨集定義、檔案包含、條件編譯等

25, 檔案包含

#include"stdio.h"

#include

但是這兩種形式是有區別的:使用尖括號表示在包含檔案目錄中去查詢(包含目錄是由使用者在設定環境時設定的),而不在源檔案目錄去查詢;

使用雙引號則表示首先在當前的源檔案目錄中查詢,若未找到才到包含目錄中去查詢。使用者程式設計時可根據自己檔案所在的目錄來選擇某一種命令形式。

26,在乙個指標變數中存放乙個陣列或乙個函式的首位址有何意義呢? 因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首位址,也就找到了該陣列或函式。這樣一來

,凡是出現陣列,函式的地方都可以用乙個指標變數來表示,只要該指標變數中賦予陣列或函式的首位址即可

27,指標變數如何賦值和引用

1. 指標運算子

1) 取位址運算子&:取位址運算子&是單目運算子,其結合性為自右至左,其功能是取變數的位址。在scanf函式及前面介紹指標變數賦值中,我們已經了解並使用了&運算子。

2) 取內容運算子*:取內容運算子*是單目運算子,其結合性為自右至左,用來表示指標變數所指的變數。在*運算子之後跟的變數必須是指標變數。

需要注意的是指標運算子*和指標變數說明中的指標說明符*不是一回事。在指標變數說明中,「*」是型別說明符,表示其後的變數是指標型別。而表示式中出現的「*」則是乙個運算子用以

表示指標變數所指的變數。

28,把陣列的首位址賦予指向陣列的指標變數。

例如:int a[5],*pa;

pa=a;

(陣列名表示陣列的首位址,故可賦予指向陣列的指標變數pa)

也可寫為:

pa=&a[0]; /*陣列第乙個元素的位址也是整個陣列的首位址, 也可賦予pa*/

當然也可採取初始化賦值的方法:

int a[5],*pa=a;

29,⑤ 把字串的首位址賦予指向字元型別的指標變數

例如:char *pc;

pc="c language";

或用初始化賦值的方法寫為:

char *pc="c language";

這裡應說明的是並不是把整個字串裝入指標變數,而是把存放該字串的字元陣列的首位址裝入指標變數。

30,把函式的入口位址賦予指向函式的指標變數。

例如:int (*pf)();

pf=f; /*f為函式名*/

31,指標變數的加減運算只能對陣列指標變數進行,對指向其它型別變數的指標變數作加減運算是毫無意義的。

int a[5],*pa;

pa=a; /*pa指向陣列a,也是指向a[0]*/

pa=pa+2; /*pa指向a[2],即pa的值為&pa[2]*/

32,結構體與共用體

struct stu

;在這個結構定義中,結構名為stu,該結構由4個成員組成。第乙個成員為num,整型變數;第二個成員為name,字元陣列;第三個成員為***,字元變數;第四個成員為score,實型變數。應注

意在括號後的分號是不可少的。

struct stu boy1,boy2;

說明了兩個變數boy1和boy2為stu結構型別。

在定義結構型別的同時說明結構變數。

例如:struct stu

boy1,boy2;

boy1.num 即第乙個人的學號

boy2.*** 即第二個人的性別

33,分配記憶體空間函式malloc

例如:pc=(char *)malloc(100);

表示分配100個位元組的記憶體空間,並強制轉換為字元陣列型別,函式的返回值為指向該字元陣列的指標,把該指標賦予指標變數pc。

34, 分配記憶體空間函式 calloc

例如:ps=(struet stu*)calloc(2,sizeof(struct stu));

35,釋放記憶體空間函式free

36,鍊錶的基本操作對鍊錶的主要操作有以下幾種:

1. 建立鍊錶;

2. 結構的查詢與輸出;

3. 插入乙個結點;

4. 刪除乙個結點;

37,列舉型別

38, 型別定義符typedef

39,位運算

40,檔案操作

關於實現業務的一些個人小想法

作為一名程式設計師,我個人認為寫 只是我們的手段 工具,支撐好業務,組裝成乙個好的產品,才是我們的工作,那麼為了達到這個目的,我們需要學會如何支撐好產品,作者目前也沒有入行太長時間,作為乙個新手小白對與目前的想法做乙個總結,希望各位前輩能夠批評指正 同時,如果作者每次有新的想法,新的學習,還會更新這...

NodeJS的一些個人學習筆記

前一段時間對nodejs產生了濃厚的興趣,刻苦研究一段時間之後頗有所得,不過中間工作比較忙,有一陣子放著沒看了,這兩天做畢設 求職面試又要用到,回頭翻翻發現好多東西又忘了。今天趕緊補一補,簡單做個筆記 1.require方法的實質是呼叫load方法,load方法載入 編譯 快取module 2.事件...

對超級課程表產品的一些個人小看法

一 對比 超級課程表與課程格仔,作為課程工具軟體,超級課程表覆蓋的學校範圍相對較大,支援全國4000多所高校 而課程格仔只支援全國3126多所高校。操作上,對於一名使用者來說,由教務系統直接匯入課程表,實現一鍵匯入是一大特色,這一點在操作上作為軟體的初次使用相對於課程格仔有著很大的優勢。二 對於超級...