指針叶眉、函數(shù)址儒、預(yù)處理器

指針

指針是一個(gè)變量,其值為地址衅疙,聲明或不再使用后都要將其置為0(類似java釋放對象后置為NULL)莲趣。

野指針

產(chǎn)生原因->

(定義時(shí)未初始化)不初始化會隨機(jī)指向隨機(jī)區(qū)域,因?yàn)槿魏沃羔樧兞浚ǔ藄tatic修飾的指針變量)在定義的時(shí)候是不會默認(rèn)固定值的炼蛤,他的默認(rèn)值是隨機(jī)的妖爷。

(釋放時(shí)未被置NULL(懸空指針))使用molloc開辟內(nèi)存空間時(shí),要檢查返回值是否為NULL,如為NULL則開辟失敗絮识,如不為NULL則指針指向的時(shí)開辟內(nèi)存空間的首地址绿聘。指針指向的內(nèi)存空間在用free()或delet(delet是一個(gè)操作符)釋放后如果沒有置null或賦其他值也會成為野指針。

(指向棧內(nèi)存的指針)棧內(nèi)存在函數(shù)執(zhí)行完畢之后會釋放

危害->

指針指向一個(gè)隨機(jī)地址次舌,不受程序控制熄攘。如指向已經(jīng)被刪除的對象或指向一塊沒有訪問權(quán)限的內(nèi)存。指針再次被使用時(shí)彼念,導(dǎo)致程序異常挪圾。

如何規(guī)避->

初始化時(shí)置為NULL,指針使用完時(shí)一定要釋放并置為NULL逐沙,良好的編程習(xí)慣

指針聲明

int *p=NULL哲思;比較好看的寫法

int* p=NULL;個(gè)人認(rèn)為這個(gè)寫法比較好理解

int * p=NULL吩案; 也可以這么寫不會報(bào)錯(cuò)

int* a,b棚赔;這么寫沒有初始化,必須初始化

指針使用

int i=10徘郭;聲明一個(gè)int類型的變量i賦值為10靠益;

int* p=NULL;聲明一個(gè)int類型指針p初始化NULL残揉;

p=&i胧后;使用取地址符&將i的地址賦值給指針p;(十六進(jìn)制打印printf("%#x\n",&i)抱环,printf("%#x\n",p)得出結(jié)果是一樣的)

解引用:解析并返回內(nèi)存地址中的值?

int i2=*p壳快;(printf("%d\n", i2);的結(jié)果為10)

*p=100;(printf("%d\n", i);的結(jié)果為100江醇,因?yàn)閜是指向i的地址*p=100相當(dāng)于往i的地址的內(nèi)存保存100)

指針運(yùn)算

int i1[] = {11,22,33,44,55};? // 聲明一個(gè)int類型數(shù)組 (java中可以寫成 int[] i1={})

int* p1 = i1;//數(shù)組名就是數(shù)組在內(nèi)存中的首地址濒憋,數(shù)組是內(nèi)存連續(xù)存儲的 解引用*數(shù)組名會得到第一個(gè)元素,i1==&i1;i1+1!=&i1+1

for (size_t i =0; i <5; ++i) {

printf("%d\n", *p1++);// (++優(yōu)先級高陶夜,p1++之后取值,地址改變之后取值)輸出 11裆站,22条辟,33,44宏胯,55? 地址++

printf("%d\n", ++*p1);//++*不成立羽嫡,++(*p1)(個(gè)人理解)輸出 12 13 14 15 16 值++

}

數(shù)組指針與指針數(shù)組

int (*array3)[2] = &array;//數(shù)組指針 與int *p=&i;一樣肩袍,指針p是存著i的地址杭棵,指針array3存著array的地址,一個(gè)是int數(shù)組類型指針,一個(gè)是int類型指針

int* array2[2] = {11,22};//指針數(shù)組魂爪,array2數(shù)組被賦值{11先舷,22}但是array2中第一個(gè)元素是一個(gè)指向11的指針,第二個(gè)是指向22的指針滓侍,數(shù)組中的元素類型是int類型的指針蒋川,所以叫指針數(shù)組

int array2[2]={11,22};int數(shù)組,元素值就是int類型的11和22

二維數(shù)組指針??int aa[2][3] = {{11, 22, 33},{44, 55, 66}};或?int aa[2][3] = {11, 22, 33, 44, 55, 66};int (*arr1)[3] = &aa;arr1取值*(*arr1+0)撩笆,*(*arr1+1)捺球,也可以arr1[x][y]下標(biāo)的方法取值。

指針常量與常量指針

從左往右讀? ? const再*之前就是常量指針夕冲,反之指針常量氮兵,常量指針可修改指向,不可修改指向的值歹鱼,指針常量可修改指向的值泣栈,不可修改指向

多級指針

指向指針的指針,一個(gè)指針包含另一個(gè)指向值的指針的地址醉冤。

指針占用空間

指針地址在64位計(jì)算機(jī)中sizeof(p)=8秩霍,32位sizeof(p)=4

函數(shù)

與java的方法沒有區(qū)別,都是一組執(zhí)行一個(gè)任務(wù)的語句蚁阳,也都有函數(shù)頭函數(shù)體構(gòu)成铃绒。函數(shù)需聲明在使用之前。傳值調(diào)用不會影響實(shí)參螺捐,引用調(diào)用可以修改實(shí)參颠悬。

可變參數(shù)

函數(shù)指針

函數(shù)指針是指向函數(shù)的指針變量

寫法:函數(shù)返回值(*函數(shù)指針變量)(函數(shù)的參數(shù)) ——》void(*p)(int)

預(yù)處理器

預(yù)處理器不是編譯器,但是他是編譯過程中一個(gè)單獨(dú)的步驟定血,預(yù)處理器是一個(gè)文本替換工具赔癌,所有的預(yù)處理其都是以井號(#)開頭

常用的預(yù)處理器

宏就是文本替換,#define A 1澜沟,宏一般使用大寫區(qū)分灾票,在代碼中使用A就會被替換成1。

宏函數(shù)#define test(a, b) a>b?a:b

#define apend(arg,arg2) arg ## arg2? ?##拼接符

宏定義一行不夠使用? \? 延續(xù)符也叫宏換行符

可變宏:#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,"NDK", __VA_ARGS__);

#define MULTI(x,y) x*y這有個(gè)坑?printf("%d\n", MULTI(2, 2));輸出4??printf("%d\n", MULTI(1+1, 2)); =》1+1*2=3

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茫虽,一起剝皮案震驚了整個(gè)濱河市刊苍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌濒析,老刑警劉巖正什,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異号杏,居然都是意外死亡婴氮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來主经,“玉大人荣暮,你說我怎么就攤上這事≈嫉。” “怎么了渠驼?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鉴腻。 經(jīng)常有香客問我迷扇,道長,這世上最難降的妖魔是什么爽哎? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任蜓席,我火速辦了婚禮,結(jié)果婚禮上课锌,老公的妹妹穿的比我還像新娘厨内。我一直安慰自己,他們只是感情好渺贤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布雏胃。 她就那樣靜靜地躺著,像睡著了一般志鞍。 火紅的嫁衣襯著肌膚如雪瞭亮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天固棚,我揣著相機(jī)與錄音统翩,去河邊找鬼。 笑死此洲,一個(gè)胖子當(dāng)著我的面吹牛厂汗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呜师,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娶桦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汁汗?” 一聲冷哼從身側(cè)響起趟紊,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碰酝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戴差,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡送爸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袭厂。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墨吓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纹磺,到底是詐尸還是另有隱情帖烘,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布橄杨,位于F島的核電站秘症,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏式矫。R本人自食惡果不足惜乡摹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望采转。 院中可真熱鬧聪廉,春花似錦、人聲如沸故慈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽察绷。三九已至干签,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間克婶,已是汗流浹背筒严。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留情萤,地道東北人鸭蛙。 一個(gè)月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像筋岛,于是被迫代替她去往敵國和親娶视。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容