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