C语言指针知识点小结
前期回顧
??C語言指針基礎知識點(一)–指針及指針變量
??C語言指針基礎知識點(二)–指針變量的引用
??C語言指針基礎知識點(三)–指針變量作為函數參數
??C語言指針基礎知識點(四)–通過指針引用數組
??C語言指針基礎知識點(五)–用數組名作函數參數
??C語言指針基礎知識點(六)–通過指針引用多維數組
??C語言指針基礎知識點(七)–通過指針引用字符串
??C語言指針基礎知識點(八)–返回指針值的函數
??C語言指針基礎知識點(九)–指針數組和多重指針
??C語言指針基礎知識點(十)–動態內存分配與指向它的指針變量
指針小結
1. 指針的含義
??指針就是地址,凡是出現"指針"的地方,都可以用"地址"代替,例如,變量的指針就是變量的地址,指針變量就是地址變量。
??要區分指針和指針變量。指針就是地址本身,例如2008是某一變量的地址,2008就是變量的指針。而指針變量是用來存放地址的變量。指針變量的值是一個地址。
2. 什么叫"指向"
??地址就意味著指向,因為通過地址能找到具有該地址的對象。對于指針變量來說,把誰的地址存放在指針變量中,就說此指針變量指向誰。但應注意:并不是任何類型數據的地址都可以存放在同一個指針變量中的,只有與指針變量的基類型相同的數據的地址才能存放在相應的指針變量中。例如:
int a, *p; // p是 int * 型的指針變量,基類型是 int 型 float b; p=&a; // a 是 int 型,合法 p=&b; // b 是 float 型,類型不匹配??既然許多數據對象(如變量、數組、字符串、函數等)都在內存中被分配存儲空間,就有了地址,也就有了指針。可以定義一些指針變量,存放這些數據對象的地址,即指向這些對象。
??void * 指針是一種特殊的指針,不指向任何類型的數據,如果需要用此地址指向某類型的數據,應先對地址進行類型轉換。顯示或隱示的類型轉換。
3. 在對數組的操作中正確地使用指針
一維數組名代表數組首元素的地址,如:
int *p, a[10]; p=a;??p是指向 int 型類型的指針變量,顯然,p 只能指向 a 數組中的元素,而不是指向整個數組。在進行賦值時一定要先確定賦值號兩側的類型是否相同,是否允許賦值。
對p = a;, 準確地說應該是:p 指向 a 數組的首元素,在不引起誤解的情況下,有時也簡稱為:p指向a 數組。 同理,p 指向字符串,應理解為 p 指向字符串中的首字符
4. 指針變量的歸納比較
| int *p[4] | int *[4] | 定義指針數組p,它由4個指向整型數據的指針元素組成 |
| int (*p)[4] | int (*)[4] | p為指向包含4個元素的一維數組的指針變量 |
| int *p() | int *() | p為返回一個指針的函數,該指針指向整型數據 |
| int (*p)() | int (*)() | p為指向函數的指針,該函數返回一個整型值 |
| int **p | int ** | p是一個指針變量,它指向一個指向整型數據的指針變量 |
| void *p | void * | p是一個指針變量,其基類型為 void,不指向具體的對象 |
5. 指針運算
a. 指針變量加減一個整數
??例如: p++, p- -, p+i, p-i, p+=i, p-=i 等均是指針變量加(減)一個整數。
??將該指針變量的原值和它指向的變量所占用的存儲單元的字節數相加(減)
b. 指針變量賦值
將一個變量地址賦給一個指針變量。如:
p=&a; // 將變量a的地址賦值給p p=array; // 將數組array首元素的地址賦給p p=&array[i]; // 將數組 array 第 i 個元素的地址賦給p p=max(); // max為已定義的函數,將max的入口地址賦給p pa=p2; // p1和p2是基類型相同的指針變量,將p2的值賦給p1c. 兩個指針變量可以相減
??如果兩個指針變量都指向同一個數組中的元素,則兩個指針變量值之差是兩個指針之間的元素個數。
d. 兩個指針變量比較
若兩個指針變量指向同一個數組中的元素,則可以進行比較。指向前面的元素的指針變量"小于"指向后面元素的指針變量。如果 p1 和 p2 不指向同一數組則比較無意義。
6. 指針變量可以有空值
指針變量可以不指向任何變量,可以這樣表示:
p=NULL;其中,NULL是一個符號常量,代表整數0。在stdio.h頭文件中對NULL進行了定義:
# define NULL 0它使p指向地址為0的單元。系統保證使該單元不作他用。
注意:
總結
以上是生活随笔為你收集整理的C语言指针知识点小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言之指针总结(1)
- 下一篇: 【20保研】北京航空航天大学计算机学院2