------- android教育訓練、IOS教育訓練、期待與您交流! ----------
一、 指針前奏
1. 指針的重要性
指針是C語言中非常重要的資料類型,如果你說C語言中除了指針,其他你都學得很好,那你幹脆說沒學過C語言。
2. 小需求
l void change(int n)函數調用完畢後,改變實參的值
l 分析:修改實參的值->找到存儲空間->位址
二、 指針變量的定義
1. 定義的格式
l 類名辨別符 *指針變量名;
l int *p;
2. 先定義後指派
l 簡單取值
int a = 10;
int *p;
p = &a;
printf(“%d”, *p);
l 簡單改值
*p = 9;
3. 定義的同時指派
int a = 10;
int *p = &a;
4. 實作修改實參
5. 注意點
l int *p; p = 1000;
l int *p; *p = 100;
l int *p; *p = &a;
l %p輸出指針裡面存儲的位址值
l 其他指針類型說明,比如float *p; char *p;
l 不能亂用類型,比如int a = 10; float *p = &a;
6. 清空指針
l p = 0;
l p = NULL;
三、 指針執行個體
1. void swap(char *a, char *b) (注意temp=a; a = b; b = temp;)
2. int sumAndMinus(int a, int b, int *minus)
四、 指針探究
1. 指針變量所占用的存儲空間
2. 為何指針變量要分類型?
int i = 2;
char c = 1;
int *p = &c;
printf(“%d”, *p);
五、 指針與數組
1. 指向一維數組元素的指針
2. 用指針周遊一維數組元素
l 先周遊char數組(‘i’,’t’),再周遊int類型數組
l *(p+i)和*(p++)的差別
l a+i和a++
l p[0]、p[1]
六、 指針與字元串
1. 字元串回顧
char s[] = “mj”;
2. 其他定義字元串的方式
char *s = “mj”;
或者
char *s;
s = “mj”;
3. 兩種定義方式的差別
l 記憶體分析
l 畫圖分析
l 常量和變量字元串的差別
l 常量的記憶體位址檢視
七、 傳回指針的函數
l 指針也是C語言中的一種資料類型,是以一個函數的傳回值肯定可以是指針類型的
l 傳回指針的函數的一般形式為:類型名 * 函數名(參數清單)
八、 指向函數的指針
1. 為什麼指針可以指向一個函數?
函數作為一段程式,在記憶體中也要占據部分存儲空間,它也有一個起始位址,即函數的入口位址。函數有自己的位址,那就好辦了,我們的指針變量就是用來存儲位址的。是以,可以利用一個指針指向一個函數。其中,函數名就代表着函數的位址。
2. 指向函數的指針的定義
定義的一般形式:函數的傳回值類型 (*指針變量名)(形參1, 形參2, ...);
3. 使用注意
l 由于這類指針變量存儲的是一個函數的入口位址,是以對它們作加減運算(比如p++)是無意義的
l 指向函數的指針變量主要有兩個用途:
· 調用函數
· 将函數作為參數在函數間傳遞