0、隨機數:
- 要用C語言產生隨機數,首先在預處理程序部分要引入stdlib.h頭文件,然后就可以用rand()在后續程序中生成隨機數了。
- 如果不設置隨機數種子srand(),后面生成的隨機數序列就是以41開頭的一個固定序列,因此一般以系統時間來設置隨機數種子,所以在預處理程序部分還要引入time.h頭文件。通過代碼srand((unsigned int)time(NULL)); 設置隨機數種子。需要注意的是,隨機數種子設置一次即可,后面每次生成隨機數就行了。
1、數組:
- 數組:由編譯器在棧中申請一片連續空間,其中每一個空間中的元素類型是相同的。因此數組可以通過指針自增,自減來遍歷。
- 語法:數組類型 數組名[數組大小] = {x,x,~,x};
- 設置數組時,在給數組一次性賦值的情況下,可以省略數組大小。
- 設置數組時,只是定義數組類型,數組名和數組大小的情況下,可以通過for循環給數組初始化。
- 數組訪問的時候,數組下標都是從0開始的。
2、函數:
-
函數是面向過程編程語言的最基本的單位。
-
函數是一個代碼塊,擁有特定的輸入輸出接口,用于實現一個特定的功能。
-
函數優點:
1、提高代碼的可讀性
2、提高代碼復用性
3、提高了可移植性
4、提高可維護性 -
函數的定義:
函數類型 函數名(形參){函數體
}
函數的調用:函數名(實參);
- 函數的類型和返回值
- 函數可以有返回值,也可以沒有返回值
- 函數的類型就是返回值的類型,可以是任意類型
- 函數的返回值是由return來給出的,return除了可以給函數返回值以外,還能終止函數。
- 如果沒有返回值,函數類型就是void,沒有返回值可以使用return,直接后面跟分號就可以。
- 注意:在c語言中,函數如果寫在主函數后面,那么在主函數前面要寫上函數聲明,寫函數聲明只需要寫上:函數類型 函數名(形參)即可。
- 函數遞歸:函數遞歸,可以理解就是兩個過程,一個是遞,一個是歸,這個兩個過程的轉折點就是遞歸終止條件,滿足某個條件之后,遞歸程序就從遞的過程轉向了歸的過程。
3、指針:
- 指針的定義就是:存放變量地址的變量;
- 指針初始化時,為什么指針類型要求必須和它所指向的變量類型一致?
答:不同類型的變量占用的內存空間大小不同(如int通常 4 字節,char1 字節)。指針類型決定了指針進行加減運算時的步長,以及解引用時訪問的內存范圍。例如:int* 指針 + 1 會移動 4 字節(跳過一個int),而char* 指針 + 1 只移動 1 字節。如果類型不匹配,可能導致訪問越界。 - int* p; 執行了p+1,就相當于讓p保存的地址向后移動4個字節,因為指針指向的是整型變量。數組在內存中是連續存放的,所以可以通過這種方式訪問數組中每個元素,一維數組的數組名就是數組的首地址。
- 指針的初始化方式如下:
int a = 12;
// 正確的指針初始化方式:
int* p1 = &a;
// 錯誤的指針初始化方式:
int* p2;
*p2 = a;
- 初始化名命的時候,int p = &a; 在初始化過程中是"解引用"符號,&是"取地址"符號。
- int* p 等價于 &a; *p等價于a;
- 如果函數形參設置為指針(int* p),那么傳遞到函數形參位置的實參就得是一個變量地址(&a)。通過函數設置形參的方式,可以讓本來只能返回一個值的函數,返回多個值,這種方法的本質就是,函數把傳遞進去的變量的值通過運算進行了修改( 利用了*p等價于a)。
總結:
- 函數是一種便于模塊化代碼的方式,哪一塊出問題就改哪一塊代碼即可。
- 指針方便了數組遍歷,打破了函數只能返回一個值的魔咒。