一、取地址運算
- 運算子&
- scanf("%d",&i);中的&是獲得變數的地址,它的操作物件必須是變數
- &不能對沒有地址的東西取地址:&(a+b),&(a++)
二、指標
- 就是儲存地址的變數
- int i; int *p = &i;
- int *p,q //p是一個指標,是一個指向int型的指標變數,q則是一個單純的int型變數
1、指標變數 - 變數的值是記憶體的地址
- 普通變數的值是實際的值
- 指標變數的值是具有實際值的變數的儲存地址
2、作為引數的指標 - void f(int *p);
- 在被呼叫的時候就得到了某個變數的地址:int i = 0;f(&i);
- 在函式里面就可以透過這個指標訪問外面的那個i
3、訪問那個地址上的變數* - '*'是一個單目運算子,用來訪問指標的值多表示的地址上的變數
- 可以做右值也可以做左值
- int k = *p;(相當於將p所指向的地址中所儲存的資料賦值給了p)
- *p = k+1;
三、指標與陣列
1、傳入函式的陣列變成了什麼
- int f(int a[]);//實際上是指標,是指向陣列a首地址的指標
- 在函式里面對陣列進行賦值操作,是可以成功的
2、陣列變數是特殊的指標
- 陣列變數本身表達地址,所以
- int a[10]; int *p=a;//無需用&取地址
- 但是陣列的單元表達的是變數,需要用&取地址
- a == &a[0];