C語言學習(十二)指標介紹

2021-09-10 13:59:11 字數 2054 閱讀 4823

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...