C语言关于指针知识点总结【2】
記了忘、忘了再記 嗚嗚嗚
1.例如*p
(1)一個變量的地址稱為該變量的指針。? ? *p
(2)如果一個變量是專門用來存儲另一個變量的地址,則稱為指針變量。? ?p
p是指針變量,*p是p指向的變量的值。
(3)嚴格地說一個指針是一個地址,是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變量 。? ? ? ? ?為避免混淆,“指針”是指地址,是常量;“指針變量”是指取值為地址的變量。
2.指針變量的類型是指針所指向的變量的數據類型,而不是指針自身的數據類型。
3.指針變量的值是指指針所指向的變量在內存中所處的地址。
4.指針可以指向數組的首地址,數組名代表數組首地址,等價于? ?&數組名[0]。
5.多級指針:
指向指針的指針? ?即指向指針變量的指針變量
例如:指針變量q? 指向? 變量p,? 而p本身又是指針變量, 它指向另一個變量i,則變量q就是指向指針的指針。
知識點說明:使用多級指針的形式為**q。q的前面有兩個"*"號,由于“*”是按自右向左順序結合的,因此,**q相當于*(*q)。
如上圖所示,q指向p,*q訪問的是p;? ? ? ? ? ? 而p又指向i,*p訪問的是i,
因此**q訪問的是i。
6.指針變量作為函數參數
函數的參數可以是整型,實型,字符型等基本數據類型,還可以是指針類型。使用指針作為函數的參數,實際上向函數傳遞的是變量的地址。
(1)C語言中實參變量和形參變量之間的數據傳遞是單向的“值傳遞”方式,用指針變量作為函數參數時同樣要遵循這一規則。
(2)不可能通過執行調用函數來改變實參指針變量的值,但是可以改變實參指針變量所指變量的值
注意:
p是指針變量,*p是p指向的變量的值。
假設有一個形參和實參那么就有
這兩者的的區別:
void swap(int* p1, int* p2)
{
?? ?int* p; ? ? ? ? /*在函數中定義一個局部指針變量p*/
?? ?p = p1; ? ? ? ?/*通過指針p將傳遞過來的形參p1和p2進行交換*/
?? ?p1 = p2; ? ? ? //使p1和p2的值互換。
?? ?p2 = p;
}
void swap(int* p1, int* p2)
{
?? ?int p;
?? ?p = *p1;
?? ?*p1 = *p2; ? ? //*p1,*p2交換意味著p1和p2指向的存儲單元的值進行了交換
?? ?*p2 = p;
}
通常用整型變量而非指針變量作為*p1和*p2進行交換的輔助變量。
7.指針與數組
7.1指向一維數組的指針變量
指針與數組的關系十分密切,實際上數組名本身就是一個常量指針(指針所指的位置保持不變),當定義數組時候,首地址就已經確定且不再改變了。可以將數組名arr看作一個指針,它永遠指向arr[0]。
由于數組中的元素的內存是連續排列存放的,因此任何能由數組下標完成的操作都可以由指針來實現。
假設指針變量p指向一維數組a,C語言規定指針對數組的表示方法有以下幾種:
(1)p+n和a+n表示數組元素a[n]的地址,即&a[n]。
(2)*(p+n)和*(a+n)表示p+n或a+n指向的數組元素值,即等效于a[n]。
(3)指向數組的指針變量也可以用數組的下標形式表示為p[n],其效果相當于*(p+n)。
因此要引用一個數組元素,既可以用傳統的數組元素的下標法,也可以用指針的表示方法。
1)下標法:a[i]的形式。
2)地址法:*(a+i),其中a是數組名。
3)指針法:*(p+i)或p[i],其中p是指向數組a的指針變量。
7.2數組指針做函數參數
先發了再編輯
總結
以上是生活随笔為你收集整理的C语言关于指针知识点总结【2】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 名词性从句(1)——同位语从句(1)
- 下一篇: 为什么要配置环境变量