C語言複習 指標

2021-09-21 18:28:42 字數 3376 閱讀 4070

一、指標是什麼

1.由於通過位址可以找到所需的變數單元,即位址指向變數單元,則可將位址形象化地稱為"指標"。

二、怎樣定義指標變數

1.定義指標變數的一般形式:型別名 * 指標變數名;

例如:int *a,int *pointer_1,float *pointer_2,char *pointer_3。

2.在定義指標標量時,同時對它初始化。

例如:int *pointer_1=&a,即定義指標變數pointer_1,並指向a。

注:(1)指標變數前的"*"表示該變數為指標型變數,指標變數名為pointer_1。

(2)在定義指標變數時必須指定基型別。

乙個變數的指標的含義,一是以儲存單元編號表示的純位址(如編號為2000位元組),一是它指向的儲存單元的資料型別。

例如:a是指向整型資料的指標變數,b是指向單精度型資料的指標變數。

(3)指向整型資料的指標型別表示為"int*",讀作"指向int指標"或簡稱"int指標"。

(4)指標變數中只能存放位址(指標),不能將乙個整數賦給乙個指標變數。

例如:*pointer_1=100;             此語句錯誤。

int *pointer,   pointer=&a;       此語句正確。

3.怎樣引用指標變數

(1)給指標變數賦值,例如:p=&a,即將a的位址賦給指標變數p。

(2)引用指標變數指向的變數。

(3)引用指標變數的值。

注:(1)&  取位址運算子  &a是變數a的位址。

(2)*  指標運算子  *p代表指向x變數p指向的物件。

三、通過指標引用陣列

1.陣列元素的指標

陣列元素的指標就是陣列元素的位址。

#includeint main()

; int *p;

p=&a[0];

}

用乙個指標變數指向乙個陣列元素。

在指標已指向乙個陣列元素時,可對指標進行自加、自減、加、減乙個整數、兩指標相減。

p+1是加上乙個陣列元素所占用的位元組數。例如:陣列元素為float型,則p+1代表p+1*4。

(2)如果p的初值為&a[0],則p+i和a+i就是陣列元素a[i]的位址。

(3)*(p+i)或*(a+i)是p+i和a+i就是陣列元素a[i]的位址。

例如:*(p+5)或*(a+5)表示的就是a[5]。

(4)如果指標變數p1和p2都指向同一陣列中的元素,如執行p2-p1,結果為p2-p1的值(兩位址之差)除以陣列元素的長度。

例如:p2指向實數型陣列元素a[5],其值為2020,p1指向a[3],其值為2012,p2-p1的結果為(2020-2012)/4=2。

3.通過指標引用陣列元素

(1)下標法,例如 a[i]此類形式。

(2)指標法,例如*(p+i)或*(a+i)表示的是p[i]或a[i]。

例1:有乙個整形陣列a,有10個元素,要求輸出陣列中的全部元素。

(1)下標法

#includeint main()

(2)指標法

#includeint main()

(3)用指標變數指向陣列元素。

#includeint main()

其三者執行結果均為:

注:在用指標變數p來指向元素時,用p++使p的值不斷改變從而指向不同的元素。

4.在利用指標引用陣列元素時,有以下幾種情況:

(1)    p++;

*p;p++是使p指向下乙個元素a[1],然後再執行*p,得到下乙個元素a[1]的值。

(2)   *p++

等價於*(p++),即先引用p的值,實現*p的運算,然後再使自增。

(3)*(++p)

即先使p的值自增,再實現*p的運算。

(4)++(*p)

即p所指向的元素值加1.若p=a,且a[0]的值為3,則在執行完++(*p)後,a[0]的值為4。

注:是元素a[0]的值加1,而不是指標p的值加1。

(5)如果p當前指向a陣列中第i個元素a[i],則:

1.*(p++)相當於a[i++],即先對p進行*運算,再使p的值自增。

2.*(p- -)相當於a[i- -],即先對p進行*運算,再使p的值自減。

3.*(++p)相當於a[++i],即先使p的值自增,再對p進行*運算。

4.*(- -p)相當於a[- -i],即先使p的值自減,再對p進行*運算。

四、用陣列名作函式引數

表 1 以變數名和陣列名作為函式引數的比較

實參型別

變數名陣列名

要求形參的型別

變數名陣列名或指標變數

傳遞的資訊

變數的值

實參陣列首元素的位址

通過函式呼叫能否改變實參的值

不能改變實參變數的值

能改變實參陣列的值

注:實參陣列名代表乙個固定的位址,或者說是指標常量,但形參陣列名並不是乙個固定的位址,而是按指標變數處理。

例2、將陣列a中n個整數按相反順序存放。

#includevoid inv(int *x,int n);

int main()

printf("\n");

getchar();

getchar();

return 0;

}void sort(int x,int n)

}}

其執行結果為:

函式sort中用陣列名作為形參,用下標法引用形引數組元素。

五、通過指標引用多維陣列元素

1.二維陣列元素的位址

二維陣列a的有關指標

表示形式含義值

a二維陣列名,指向一維陣列a[0],即0行的起始位址

2000

a[0],*(a+0),*a

0行0列的元素位址

2000

a+1,&a[1]

1行的起始位址

2016

a[1],*(a+1)

1行0列元素a[1][0]的位址

2016

a[1]+2,*(a+1)+2

,&a[1][2]

1行2列元素a[1][2]

2024

*(a[1]+2),*(*(a+1)+2)

,a[1][2]

1行2列元素的值

元素值,13

C語言複習 指標

程式設計練習 1.用指標實現報數問題 用指標的方法解決3人報數問題 include int main i k m 0 i是陣列計數,k是迴圈3次計數,m是退出的人計數 while m n 1 n是總人數,退出的人數要比總人數少乙個人結束迴圈 if k 3 i if i n 如果i到了成員最後,返回最...

c語言複習 指標

注 本文是對蘇小紅版c語言教材第9章的筆記 間接定址運算子 解引用運算子 e.g.int pa a 用於指標變數的定義 int a 0 printf a is d,a is p,pa is p,pa is d a,a,pa,pa 用於讀取指標變數儲存的位址對應的變數的值輸出結果 a與pa相同,a與p...

C語言複習 指標

1.什麼是指標 我們把位址形象化的稱為 指標 意思是通過他可以找到以他為位址的記憶體單元。指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別 指標所指向的型別 指標的值或者叫指標所指向的記憶體區 指標本身所佔據的記憶體區。讓我們分...