函 數
(一)引數:當函式想使用主函式中的變數時,則
將主函式中的變數作為引數傳遞給函
數內部
返回值:當主函式想使用函式中的變數或者
資料時,則將函式內部的資料或變數
作為返回值返回給主函式使用
1.函式的傳參
1.複製傳遞
實參將值複製乙份並給相應的形參
對形參的操作和實參沒有任何關係
2.位址傳遞
如果函式體內部想操作主函式中的
變數,則把主函式的位址傳遞給函
數
3.全域性變數傳遞
4.整型陣列的傳遞
1.int fun(int * a, int len)
傳遞陣列首位址和陣列長度
2.int fun(int a, int len)
傳遞陣列名和陣列長度
maopao_input();
maopao_order();
maopao_output();
5.結構體的傳遞
typedef作用:
給資料型別定義乙個別名
6.字元陣列的傳遞
字元陣列只需傳遞陣列名,不需要傳遞
字元陣列的長度,因為字元陣列中儲存
著用於標識字串結尾的'\0'字元
7.總結
1.實參的型別決定形參的型別
2.函式的功能決定實參傳入的個數
3.函式的返回值型別是由return
後面的資料型別決定的
4.功能決定函式的返回值
zhangsan;m;1000;90
2.函式指標和指標函式
1.函式指標是乙個指標,這個指標指向
乙個函式的位址
char (*fun)(int a, int b);
2.指標函式是乙個函式,這個函式的返
回值是乙個指標
char *fun(int a, int b);
(二)1.主函式的傳參
int main(void);
int main(int argc, char *argv);
1.argc:
傳入引數的個數(1 - n)
2.argv:
1.指標陣列,每個陣列元素儲存傳入主函式
的字串首位址
2.通過argv[0],argv[1] ... argv[n]利用
%s的形式輸出第1個,第2個 ... 第n個字串
2.巨集函式
#define max(a,b) a>b?a:b
巨集函式和函式的區別:
1.巨集函式沒有引數型別的概念,並且只是完成
程式的簡單替換
2.巨集函式是**的簡單替換,所以程式會變長
增加儲存空間
3.巨集函式相比於函式是**替換,執行效率比
較高4.函式是在鏈結時處理的**,函式的執行需
要有引數傳遞,和壓棧出棧的操作
5.函式的使用能夠節省儲存空間,但是因為需
要壓棧和出棧操作所以執行效率不高
記憶體管理
環境變數及系統引數區
堆區棧區
資料區常量區
初始化靜態變數區
未初始化靜態變數區
文字區
資料區:
1.儲存常量
2.儲存靜態變數 static int a
3.儲存全域性變數
棧區:1.作業系統自動管理的區域(申請,釋放記憶體)
2.棧區通常用來存放區域性變數
3.棧區中的資料未經初始化之前是隨機值
堆區:1.程式設計師手動管理的記憶體區域(申請,釋放)
申請malloc stdlib.h
釋放free stdlib.h
2.堆區中的資料一旦使用malloc函式申請,在沒有
經過free函式的釋放之前不能被作業系統**資源
c語言中有2種方式獲得記憶體
1.定義變數 可以通過指標和變數名
2.malloc 只能通過指標來操作
C語言學習之指標詳解
要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解乙個複雜型別,要理解複雜型別其實很簡單,乙個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總結了一下其原則 從變數名處起,根據運算子優先順序結合,一步一步分析.下面讓我們先從...
c語言學習之陣列指標
首先,指標,就相當於乙個位址,指標變數就是拿來存放指標所指向另一變數的位址 定義乙個指標變數需要說明 指標型別,指標變數名。例 int p,a p a 而 陣列,包括陣列型別和陣列名還有陣列長度 陣列長度只能是常量 陣列有一維陣列和多維陣列。例 int a 10 內的必須是常量。那 究竟什麼是陣列指...
C語言學習指標
恢復內容開始 一.運算子 scanf d i 裡的 獲得變數的位址,它的運算元必須是變數 int i printf x i 位址的 大小是否與int相同取決於編譯器 int i printf p i 不能對沒有位址的取位址 a b a a 二.指標初識 就是儲存位址的變數 int i int p i...