指針的介紹:
指針是一個用來存放地址的變量,可以通過指針存放的地址找到對應(yīng)位置的值,對其進行使用。
指針在32位平臺下的大小是4個字節(jié),在64位平臺下是8個字節(jié)。(這是因為32位平臺下內(nèi)存地址是由32根地址線組成,一根地址線就是1bit,用4個字節(jié)就可以存下,而64位平臺有64根地址線,需要八個字節(jié)才可以存下)。
如果對指針進行加減與解引用操作,則±的步長與解引用操作的長度由指針類型決定,指針類型是幾個字節(jié)±步長與解引用就是幾個字節(jié)。
一、簡單指針?
char*pc(字符指針)
int*pi(整形指針)
float*pf(浮點型指針)
還有short…double等等,拿部分舉例。
1.1指針的定義與使用
這三種指針的用法基本相同,只不過char*指針存放的是char變量地址,int型指針存放的是int變量地址,float指針存放的是float變量地址。
#define_CRT_SECURE_NO_WARNINGS1#include
我們可以使用指針對指針指向的變量進行使用(修改或輸出)。
1.2指針與數(shù)組
數(shù)組名就是數(shù)組的首地址。
代碼示例
點擊加載圖片
得到數(shù)組首地址可以通過指針遍歷數(shù)組
代碼示例
點擊加載圖片
二、指針數(shù)組?
指針數(shù)組就是用來裝指針的數(shù)組
intp1[];//(方便理解拿整形數(shù)組對比)p1與[]結(jié)合說明p1是數(shù)組,裝的是int類型的數(shù)據(jù)int*p2[];//[]優(yōu)先級比*高p2先與[]結(jié)合,說明p2是一個數(shù)組里面裝的是int*類型的數(shù)據(jù)
舉個例子
#include
三、數(shù)組指針?
3.1數(shù)組指針的定義
數(shù)組指針與指針數(shù)組名字非常相似但是卻截然不同,數(shù)組指針是一個指針,指針數(shù)組是一個數(shù)組
//對比一下指針數(shù)組和數(shù)組指針int*pa[];//這是指針數(shù)組,優(yōu)先級問題,pa先與[]結(jié)合,說明pa是一個數(shù)組,裝的是int*的數(shù)據(jù)int(*pa)[]//這是數(shù)組指針,優(yōu)先級更高,pa先與*結(jié)合,說明pa是一個指針,指向一個int類型的數(shù)組
3.2”數(shù)組名“與”&數(shù)組名“
前面說了數(shù)組名代表數(shù)組首元素地址,那&數(shù)組名呢?
代碼示例
點擊加載圖片
對數(shù)組名與&數(shù)組名進行輸出,發(fā)現(xiàn)地址一樣
點擊加載圖片
對數(shù)組名與&數(shù)組名+1,發(fā)現(xiàn)數(shù)組名加了四個字節(jié),而&數(shù)組名加了十六進制的28,也就是十進制的40,為整個數(shù)組的大小。
結(jié)論:數(shù)組名與&數(shù)組名地址一樣,但是數(shù)組名代表的是首元素地址,而&數(shù)組名代表的是整個數(shù)組。
3.3數(shù)組指針使用
voidprint(int(*pa)[3]){for(inti=0;i<2;i++){for(intj=0;j<3;j++){printf('%d',arr[i][j]);}}}intmain{intarr[2][3]={0,1,2,3,4,5};print(arr);//二維數(shù)組首地址相當(dāng)于&(第一個一維數(shù)組)}
四、函數(shù)指針邏
函數(shù)指針就是指向函數(shù)的指針
函數(shù)指針的定義
*函數(shù)返回值(pa)(函數(shù)參數(shù))
可以看作pa先與*結(jié)合,說明pa是個指針,指向一個函數(shù)
4.1函數(shù)指針的使用
代碼示例
intadd(inta,intb){returna+b;}intmain{int(*pa)(int,int)=add;inta=3;intb=4;printf('%d',pa(3,4));//7}
五、函數(shù)指針數(shù)組?
函數(shù)指針數(shù)組就是用來裝函數(shù)指針的數(shù)組,需要注意每個函數(shù)指針數(shù)組的返回值和參數(shù)必須相同類型
函數(shù)指針數(shù)組的定義
*函數(shù)返回值(pa[])(函數(shù)參數(shù))
可以看作pa先與[]結(jié)合說明pa是一個數(shù)組,每個位置裝的是函數(shù)指針(地址)
5.1函數(shù)指針數(shù)組的使用
#include
點擊加載圖片
六、指向函數(shù)指針數(shù)組的指針??
函數(shù)指針數(shù)組的定義為int(*pa[5])(參數(shù)),指向函數(shù)指針數(shù)組的指針就是:
int((*pa)[5])(參數(shù))//用括號把pa括起來使得pa先與*結(jié)合,說明pa是一個指針,返回值類型就為函數(shù)指針數(shù)組
點擊加載圖片
指向函數(shù)指針數(shù)組的指針的定義
voidtest(char*str){printf('指針真簡單,%s',str);}intmain{//定義一個函數(shù)指針數(shù)組void(*pa[5])(char*);pa[0]=test;//指向函數(shù)指針數(shù)組的指針void(*(*ppa)[5])(char*)=&pa;return0;}
七、回調(diào)函數(shù)
回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng)這個指針被用來調(diào)用其所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)。回調(diào)函數(shù)不是由該函數(shù)的實現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時由另外的一方調(diào)用的,用于對該事件或條件進行響應(yīng)。
stdlib頭文件下的qsort函數(shù)就是一個回調(diào)函數(shù),鏈接:qsort函數(shù)詳解
完結(jié)
創(chuàng)作不易,還請各位小伙伴多多點贊?關(guān)注?收藏?
聯(lián)系客服