*號(hào)的意義
在指針聲明時(shí),*號(hào)表示所聲明的變量為指針
在指針使用時(shí),*號(hào)表示取指針?biāo)赶虻膬?nèi)存空間中的值
我將其理解為“鑰匙”,如圖
實(shí)例1:指針使用
#include <stdio.h> int main(){ int i = 0; int* pI; char* pC; float* pF; pI = &i; *pI = 10; printf('%p, %p, %d\n', pI, &i, i); printf('%d, %d, %p\n', sizeof(int*), sizeof(pI), &pI); printf('%d, %d, %p\n', sizeof(char*), sizeof(pC), &pC); printf('%d, %d, %p\n', sizeof(float*), sizeof(pF), &pF); return 0;}
傳值調(diào)用和傳址調(diào)用
- 指針是變量,因此可以聲明指針參數(shù)
- 當(dāng)一個(gè)函數(shù)體內(nèi)部需要改變實(shí)參的值,則需要使用指針參數(shù)(很多新手容易在這里犯錯(cuò)誤)
- 函數(shù)調(diào)用時(shí)實(shí)參值將復(fù)制到形參
- 指針適用于復(fù)雜數(shù)據(jù)結(jié)構(gòu)作為參數(shù)的函數(shù)中
實(shí)例2:利用指針交換變量
#include <stdio.h> int swap(int* a, int* b){ int c = *a; *a = *b; *b = c;} int main(){ int aa = 1; int bb = 2; printf('aa = %d, bb = %d\n', aa, bb); swap(&aa, &bb); printf('aa = %d, bb = %d\n', aa, bb); return 0;}
常量與指針 (這個(gè)意思是說怎么分辨是指針還是常量)
方法是:左數(shù)右指
當(dāng)const出現(xiàn)在*號(hào)左邊時(shí)指針指向的數(shù)據(jù)為常量
當(dāng)const出現(xiàn)在*后右邊時(shí)指針本身為常量
實(shí)例3:常量與指針分析
#include <stdio.h> int main(){ int i = 0; const int* p1 = &i; int const* p2 = &i; int* const p3 = &i; const int* const p4 = &i; *p1 = 1; // compile error p1 = NULL; // ok *p2 = 2; // compile error p2 = NULL; // ok *p3 = 3; // ok p3 = NULL; // compile error *p4 = 4; // compile error p4 = NULL; // compile error return 0;}
小結(jié):
- 指針是C語言中一種特別的變量
- 指針?biāo)4娴闹凳莾?nèi)存的地址
- 可以通過指針修改內(nèi)存中的任意地址的內(nèi)容