標籤:
一、 指標前奏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. 清null 指標
l p = 0;
l p = NULL;
三、 指標執行個體
- void swap(char *a, char *b) (注意temp=a; a = b; b = temp;)
- int sumAndMinus(int a, int b, int *minus)
四、 指標探究
- 指標變數所佔用的儲存空間
- 為何指標變數要分類型?
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]
3. 習題
1> 設計一個函數:int arraySum(int a[], int n),求一維數組a前n個數的和。現在利用int *p替換int a[]
六、 指標與字串1. 字串回顧
char s[] = “mj”;
2. 其他定義字串的方式
char *s = “mj”;
或者
char *s;
s = “mj”;
3. 兩種定義方式的區別
l 記憶體分析
l 畫圖分析
l 常量和變數字串的區別
l 常量的記憶體位址查看
4. 習題
1> 編寫一個int string_len(char *s),返回字串s的字元長度
七、 返回指標的函數
l 指標也是C語言中的一種資料類型,因此一個函數的傳回值肯定可以是指標類型的
l 返回指標的函數的一般形式為:類型名 * 函數名(參數列表)
八、 指向函數的指標1. 為什麼指標可以指向一個函數?
函數作為一段程式,在記憶體中也要佔據部分儲存空間,它也有一個起始地址,即函數的入口地址。函數有自己的地址,那就好辦了,我們的指標變數就是用來儲存地址的。因此,可以利用一個指標指向一個函數。其中,函數名就代表著函數的地址。
2. 指向函數的指標的定義
定義的一般形式:函數的傳回值類型 (*指標變數名)(形參1, 形參2, ...);
3. 使用注意
l 由於這類指標變數儲存的是一個函數的入口地址,所以對它們作加減運算(比如p++)是無意義的
l 指向函數的指標變數主要有兩個用途:
c中的指標