1.指針式內(nèi)存中一個(gè)最小單元的編號(hào),也就是地址
2.平時(shí)口語(yǔ)中說(shuō)的指針,通常指的是指針變量,是用來(lái)存放內(nèi)存地址的變量
3.指針的大小在32位平臺(tái)是4個(gè)字節(jié);在64位平臺(tái)是8個(gè)字節(jié)
總結(jié):指針就是地址,口語(yǔ)中說(shuō)的指針通常指的是指針變量。
接下來(lái)我們說(shuō)一下指針的類型
我們都知道,變量有不同的類型:整型,浮點(diǎn)型等。那指針有沒有類型呢?
準(zhǔn)確的說(shuō):有的。
我們都知道一個(gè)int類型占用4個(gè)字節(jié),而一個(gè)char類型占用1一字節(jié),指針的類型就決定了指針向前或向后的距離(也就是走一步的大?。?。
在這里我們可以從內(nèi)存中清晰的看到,地址變化的大小,這就是指針類型的意義之一。
上邊說(shuō)了指針其實(shí)就是變量的地址,而指針的解引用操作就是找到指針?biāo)傅倪@個(gè)變量,對(duì)其進(jìn)行重新賦值等操作。
在這個(gè)圖中我們可以看到,int類型的指針可以正常的把值修改成我們想要的結(jié)果;而char類型卻不行(在這里,因?yàn)閏har是一個(gè)字節(jié),所以在內(nèi)存中只能一個(gè)字節(jié)一個(gè)字節(jié)的修改我們變量,而我們的arr2數(shù)組卻是int類型,四個(gè)字節(jié)位一組,所以其只能修改10個(gè)字節(jié)的內(nèi)存,結(jié)果也就不是我們想要的了),這就是指針類型的另一個(gè)意義。
總結(jié):
指針的類型決定了,對(duì)指針進(jìn)行解引用操作時(shí),有多大的權(quán)限(能操作幾個(gè)字節(jié))。
概念:野指針就是指針指向的位置是不可知的,隨機(jī)的
3.1指針的成因 1.指針未初始化int main()
{int a = 10;
int* p;
*p = &a;
return 0;
}
大多數(shù)編程小白經(jīng)常會(huì)這樣寫代碼,其實(shí)這個(gè)代碼是有問題的,其問題在于,一開始未進(jìn)行初始化,所以指針?biāo)赶虻膬?nèi)存就是未知的,后續(xù)進(jìn)行的賦值操作,也就未知的內(nèi)存中進(jìn)行修改,這可能導(dǎo)致程序奔潰。所以,我們要盡可能避開這種寫法。
這里推薦一種寫法:
int main()
{int a = 10;
int* p = NULL;
//NULL - 相當(dāng)于\0
*p = &a;
return 0;
}
2.指針越界訪問
在這里我們就能看見,指針解引用操作已超過(guò)數(shù)組的大小,在編譯器中會(huì)報(bào)錯(cuò)的,并且我們也不知道后續(xù)的指針知道了那兒里。
這里放在后續(xù)的時(shí)候講解,這里就簡(jiǎn)單提示一下。
3.2如何規(guī)避野指針int main()
{int* p = NULL;
//....
int a = 10;
p = &a;
if (p != NULL)//檢查指針有效性
{*p = 20;
}
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧