柚子快報(bào)激活碼778899分享:初識(shí)指針(2)<C語(yǔ)言>
柚子快報(bào)激活碼778899分享:初識(shí)指針(2)<C語(yǔ)言>
前言
??????? 前文介紹完了一些指針基本概念,下面介紹一下,const關(guān)鍵字、指針的運(yùn)算、野指針的成因以及避免,assert函數(shù)等。
目錄
const(常屬性)
變量的常屬性
?指針的常屬性
?指針的運(yùn)算
①指針+ -整數(shù)
②指針-指針
?③指針與指針的比較
?野指針的成因以及避免
①指針未初始化,就使用
②指針越界訪問(wèn)數(shù)組?
?③指針使用已釋放的地址
assert(斷言)函數(shù)
const(常屬性)
變量的常屬性
??????? 變量是可以被修改的,也可以通過(guò)將其地址交給指針變量來(lái)進(jìn)行修改。如果在變量聲明階段,在變量名前加上const,那么這個(gè)變量就具有了常屬性,在后面就不能進(jìn)行修改了。
???????? 報(bào)錯(cuò)了,程序也不能正常運(yùn)行。
?指針的常屬性
??????? 指針變量是否也能使用const來(lái)限制變量的修改呢?如果能夠修改,const應(yīng)該放哪呢?
在此之前先講一講3個(gè)容易弄混的概念(以指針變量p為例)
①p——指針變量,里面存放著一個(gè)地址
②*p——p中存放地址指向的對(duì)象
③&p——指針變量p的地址
兩種情況:①const在“*”左邊,限制的是*p,也就是p中存放地址指向的對(duì)象
??????? 可以看到解引用指針p時(shí)報(bào)錯(cuò),但是更改p中的地址是可以的。
②const在“*”右邊,限制的是p中指向的對(duì)象。
??????? 同理, 可以看到更改指針p指向地址時(shí)報(bào)錯(cuò),但是更改p中的地址的對(duì)象的值是可以的。
????????
?指針的運(yùn)算
??????? 指針的運(yùn)算主要有以下三種:
①指針+ -整數(shù)
②指針-指針
③指針與指針的比較
①指針+ -整數(shù)
??????? 上文說(shuō)到,指針類(lèi)型決定了指針向前一步或向后一步“走”多大距離,數(shù)組名是一個(gè)地址常量,存放的是第一個(gè)元素的地址,那么是否能夠通過(guò)加減指針完成對(duì)數(shù)組的訪問(wèn)呢?
②指針-指針
??????? 指針與指針的加法是無(wú)意義的。但是可通過(guò)指針與指針之間的減法完成對(duì)數(shù)組元素個(gè)數(shù)的統(tǒng)計(jì)。
?③指針與指針的比較
????????
?野指針的成因以及避免
??????? 野指針就是指針指向位置是不可知的(隨機(jī)的、不正確的、沒(méi)有限制的)
成因:
①指針未初始化,就使用
②指針越界訪問(wèn)數(shù)組
③指針使用已釋放的地址
①指針未初始化,就使用
②指針越界訪問(wèn)數(shù)組?
? ??????? 因?yàn)橹羔樤浇缭L問(wèn)數(shù)組導(dǎo)致打印出野指針
?③指針使用已釋放的地址
避免
①初始化指針,如果不知道指向哪,可以將指針賦值給NULL
②小心越界
③指針不再使用時(shí)及時(shí)置NULL,使用指針時(shí),先檢查指針的有效性
④避免返回局部變量的地址
assert(斷言)函數(shù)
????????assert()函數(shù)包含在庫(kù)函數(shù)
??????? 用法:用于確保程序滿(mǎn)足指定條件,如果不符合,就報(bào)錯(cuò)終止運(yùn)行
?也可以在函數(shù)開(kāi)始加上#define NDEBUG使文件中的assert()函數(shù)失效,在release環(huán)境中默認(rèn)失效。
柚子快報(bào)激活碼778899分享:初識(shí)指針(2)<C語(yǔ)言>
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。