1. 指標基礎
① 運算子&
「scanf(「%d」,i)」中的&表示獲得變數i的位址,它的運算元必須是變數,位址的大小取決於編譯器。
&不能對沒有位址的東西進行取位址,如&(a+b)、&(a++)都是不可以的。
② 指標
我們要取得位址並用其進行運算,可以用來儲存位址的就是指標。
int i;
int* p=&i;
int* p,q;
int *p,q;
上面的語句中p是指標,q是int型別整數,如果p、q都要表示指標,則需要表示為:
int *p,*q;
#includevoid f(int *p);
int main()
void f(int *p)
執行結果:
6這個數存放在變數i中,變數i的存放位址是&i,將&i傳遞給指標變數p,p存放的是i的位址。
④ 訪問位址上的變數 *
*用於訪問指標的值所表示的位址上的變數
printf(「*p=%d」,*p);
會得到p這個指標變數中的位址中存放的變數的結果。
2. 指標的應用
例2:交換兩個變數的值
#includevoid swap(int *pa,int *pb);
int main(void)
void swap(int *pa,int *pb)
在前面的函式部分講過交換兩個數的值的例子,當時是為了講函式之間傳值的問題,我們知道之間用到swap函式是不能完成兩個數的值的交換的。為了完成交換,這裡我們用到了指標,在swap中對a、b的位址進行交換,從而得到了對其值進行交換的目的。
例3:兩個整數相除,如果除法成立返回1,否則返回0
#includeint divide(int a,int b,int *result);
int main(void)
return 0;
}int divide(int a,int b,int *result)
當我們在對一些運算進行正確與否的判斷時,用函式返回運算的狀態,結果通過指標返回。
3. 指標常見錯誤
定義了指標變數,還沒有指向任何變數,就開始使用指標。
int i=6;
int k=12;
int *p=12;
這一段語句是錯誤的,在*p還沒有指向任何變數時,就對p指標所指向的位址賦值,因為p指標中還沒有位址,有可能會使程式出錯。
4. 指標與陣列
傳入函式的陣列實際上是指標,以下四種函式原型是等價的:
int sum(int *ar,int n);
int sum(int *,int);
int sum(int tar,int n);
int sum(int,int);
實際上陣列變數是特殊的指標,陣列變數的本身就表示位址,對陣列取位址不需要&,但是對單個單元進行取位址需要使用&。
int a[10];
int *p=a;
int *q=&a[2];
運算子可以對陣列做,也可以對指標做:
p[0]相當於*p
*運算子可以對指標做,也可以對陣列做
*a相當於a[0]
陣列變數是const的指標,所以不能被賦值
int a 相當於 int *const a=…
5. 指標使用
需要傳入較大的資料時用作引數;
傳入陣列後對陣列做操作;
函式返回不止乙個結果;
需要用函式來修改不止乙個變數(如swap);
動態申請記憶體。
C語言學習指標
恢復內容開始 一.運算子 scanf d i 裡的 獲得變數的位址,它的運算元必須是變數 int i printf x i 位址的 大小是否與int相同取決於編譯器 int i printf p i 不能對沒有位址的取位址 a b a a 二.指標初識 就是儲存位址的變數 int i int p i...
Python語言學習(十二)
167 爬蟲 舉例1 import urllib.request import urllib.parse import json content input 請輸入需要翻譯的內容 url request url data data i content data from auto data to a...
C語言學習筆記 指標
若觸過組合語言,那麼理解學習c語言中指標就很簡單了。指標,在彙編裡面的表現形式,無非就是定址,直接定址和間接定址。先來學習下,c語言中的4大類資料型別 基本型別 int,long,float,char 構造型別 陣列,結構體 struct,聯合體 union,列舉型別 enum 指標型別 int l...