提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
創(chuàng)新互聯(lián)建站是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計公司的優(yōu)秀設(shè)計人員和策劃人員組成的一個具有豐富經(jīng)驗的團(tuán)隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計師、平面廣告設(shè)計師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、網(wǎng)站改版、網(wǎng)頁設(shè)計制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。
目錄
文章目錄
前言
一、回顧內(nèi)存當(dāng)中的那些事
內(nèi)存中
變量數(shù)據(jù)在內(nèi)存中是倒著存放的(不是數(shù)組)
二、指針及指針類型
1、指針類型的意義
解引用訪問時(一次可以訪問多大空間,多大權(quán)限)
指針加減一跳過字節(jié)數(shù)(had missed, so impressed)
2、指針類型的強制轉(zhuǎn)換
3、野指針:沒有明確指定地址的指針
4、指針運算
總結(jié)
推薦一個新手也能上手的刷題網(wǎng)站:
LeetCode: https://leetcode-cn.com/problemset/all/
32位機(jī)器有32根地址線:
每根地址線都會發(fā)出兩種的信號,共有 2的32次方 種可能
每一種可能表示一個內(nèi)存單位的地址,位置
現(xiàn)在用 1 和 0 來信息化這些信號,并有序排列:
11111111 11111111 11111111 11111111
11111111 11111111 11111111 11111110
······
10000000 00000000 00000000 00000001
10000000 00000000 00000000 00000000
01111111 1111111 1111111 1111111
······
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000000
把信號相對應(yīng)的編號賦給內(nèi)存單位,這些二進(jìn)制編號就成了內(nèi)存單位的地址,也叫指針
(知道內(nèi)存單位發(fā)出來的并不是真正的數(shù)字 1 / 0 ,而是兩種不同的信號,人為規(guī)定的一種為 1, 一種為 0)
注:清楚指針指的是地址,是編號,指針變量指的是用來存放指針的變量,人們經(jīng)常說用指針表示的是使用指針變量及與指針一些相關(guān)的東西
變量數(shù)據(jù)在內(nèi)存中是倒著存放的(不是數(shù)組)數(shù)組元素在內(nèi)存中是地址從小到大有序存放的我們知道
但是變量的數(shù)據(jù),在小端機(jī)器內(nèi)存中都是倒著存放的<大小端問題>
字節(jié)為單位(字節(jié)內(nèi)部不改動 不變順序)
這些一定得了解
因為其倒著存放,所以通過低權(quán)限類型指針(如 char*類型指針)改變其局部內(nèi)容時,是從數(shù)據(jù)末尾開始改變的(從上圖的 44 開始改變)
<如果要先從 11 開始改變也可以,給指針先增加到末尾位置 然后減減倒序來改變>
二、指針及指針類型 1、指針類型的意義 解引用訪問時(一次可以訪問多大空間,多大權(quán)限)指針類型決定解引用時,可以訪問多大的空間:etc.
我們發(fā)現(xiàn):當(dāng)一種變量被不同類型的指針變量解引用時,可以達(dá)到改變該變量局部內(nèi)容的效果
因此,我們可以靈活地定義不同類型的指針變量,靈活地來改變一個變量的內(nèi)容
??????????????這就是指針擁有類型的意義之一
為什么會有指針類型:為什么不專門定義一種類型作為指針的類型呢?答案顯而易見
指針加減一跳過字節(jié)數(shù)(had missed, so impressed)實際上是指針加減整數(shù),跳過的字節(jié)數(shù)(題目只是易于回憶)
以 指針變量加 1 為例:
指針變量加 1 并不是單純地地址加上 1(不是單純地跳過一個字節(jié))
指針變量加 1 ,跳過多少字節(jié)(地址加多少)取決于指針類型
etc.
如果是 int 類型指針,指針變量加 1 實際上地址加了 4 個字節(jié)
如果是 short 類型指針,指針變量加 1 實際上地址加了 2 個字節(jié)
如果是 char 類型指針,指針變量加 1 實際上地址也是加了 1 個字節(jié)
而指針變量加上其他整數(shù),也是一樣道理,可推算地址實際增加或減少了多少
這也是指針擁有類型的意義之一,所以指針擁有類型是很有必要的
2、指針類型的強制轉(zhuǎn)換首先要知道 &變量 時,取出來的地址帶有類型,如 int a = 0; , 這里 &a 取出來的地址是帶有類型的,為 int 類型的地址( int* )
地址(指針)放到與原來不同類型的指針變量中需要類型轉(zhuǎn)換:
etc.
3、野指針:沒有明確指定地址的指針就如野狗一般,盡量少創(chuàng)造野狗哦
etc.
int* p;
*p = 2;
這樣寫地址為隨機(jī)的值,解引用也不知道到哪去了(野狗創(chuàng)造論)
規(guī)避野指針:
NULL —— 專門用來初始化指針
int* p = NULL; //新的指針變量如果先不打算放地址就先賦上NULL,避免創(chuàng)造野狗
看到 NULL 相當(dāng)于看到了指針,有那種感覺
4、指針運算在數(shù)組中經(jīng)常使用到指針
指針運算的幾種類型:
指針加減整數(shù)
指針變量加 1 ,跳過多少字節(jié)(地址加多少)取決于指針類型,而加減整數(shù)按指針類型來推算即可
指針-指針(絕對值)
一般只能是指向同一塊空間的兩個指針相減,相加沒必要(地址相加用不到),而不在同一塊的指針相加減沒什么意義
指向同一塊地方的指針相減的意義:一般也是在數(shù)組中
指針相減結(jié)果為兩指針之間的元素個數(shù)
如 arr [ ] 數(shù)組有十個元素,有人覺得其 首元素地址 減去 末元素地址 結(jié)果為十
不不不,實際結(jié)果應(yīng)該為 9 ,原因是沒有理解 地址有長度 和 指針指向的是地址始點
如下圖,每個格子是arr的一個元素,箭頭表示 指針指向的位置,是元素地址的開頭而不是整個元素
指針的關(guān)系運算(比大小等等)
如 : p1 >&arr[1] (p1為指針變量)
但是唯一要注意的是:比較大小時,允許數(shù)組最后一個元素的后面的那一個內(nèi)存單位(超出數(shù)組的內(nèi)存單位范圍)進(jìn)行比較操作,如下圖
但是數(shù)組第一個元素再前面的那一個內(nèi)存單位(不屬于數(shù)組的內(nèi)存單位)不能進(jìn)行比較的操作(如下圖)
總的來說:要進(jìn)行大小比較時,指針指向的范圍在數(shù)組內(nèi)(回憶看這里)
以上就是今天要講的內(nèi)容,本文介紹了初級指針的概念和注意事項,易錯點,而指針以后在數(shù)組中用途廣泛,現(xiàn)在就得打好基礎(chǔ)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧