摘要:簡(jiǎn)稱指針數(shù)組,是數(shù)組,因?yàn)闆](méi)有發(fā)生變化。就是這個(gè)指針,指向了,因?yàn)樗詻](méi)有被吸附到成為,而是留給了,讓成為了一個(gè)指針,脫離了數(shù)組名這個(gè)地址常量的范疇,也就是指向了一個(gè)個(gè)元素的整型數(shù)組的指針,簡(jiǎn)稱數(shù)組指針。
這篇文章僅限于有指針基礎(chǔ),并且大概了解這些概念,只是不通透的群體
首先了解一個(gè)概念:
類型名,顯而易見,類型名就是變量的名字,這里提前進(jìn)行說(shuō)明,數(shù)組名不是變量,也不是指針,而是地址常量,這是使用的時(shí)候系統(tǒng)會(huì)將其退化成指針。為了方便理解和統(tǒng)一,我們?cè)诒酒恼吕锩鎸?shù)組名當(dāng)做類型名類似物,但是切記。數(shù)組名不是類型名!然后,去掉變量的名字就是類型名!我已經(jīng)解釋過(guò)了把數(shù)組名當(dāng)做類型名類似的東西了。
這里我們列舉一些類型名:
int?a;---------?int是變量a的類型名
int?a[10];------------int是數(shù)組a每個(gè)元素的類型,此時(shí)這個(gè)int不是類型名,是每個(gè)元素的類型那么int [10]是數(shù)組a的類型(我們可以這樣來(lái)看,盡管在各種書上沒(méi)有這樣講的,但是這樣確實(shí)可以方便我們的理解)
int* a------------int*是a的類型,其中我們細(xì)分一下*在定義的時(shí)候代表是指針,而int代表的是指針指向的是int類型的數(shù)據(jù)哦。那么int*就是指向int類型的指針。
我們寫的是int*?a,不是int *a,雖然兩者是無(wú)所謂的,但是我會(huì)在后面講解我的理解,這里請(qǐng)記住這個(gè)*是緊跟在int后面,這樣會(huì)極大的便利我們的理解
int*?a[3]-------------這里的意思是數(shù)組a每一個(gè)元素的類型是int*,就像我上一個(gè)寫的int"*?a是一個(gè)道理。,那么此時(shí)類似我們寫的int?a[10],這個(gè)類型名int* [10]的意思就是包含10個(gè)int*類型的數(shù)組。是整個(gè)數(shù)組的類姓名,不是數(shù)組每個(gè)元素的類型名。簡(jiǎn)稱指針數(shù)組,是數(shù)組,因?yàn)閍沒(méi)有發(fā)生變化。
int (*)a[10]------------到這里我們就要進(jìn)行深入了解了,紫色字體表示是插曲,看完插曲其他的內(nèi)容連著上面說(shuō)的來(lái)
查看優(yōu)先級(jí)可以得到[]的優(yōu)先級(jí)比*更高,所以導(dǎo)致int*?a[10]和int (*a)[10]是不同的,由于[]優(yōu)先級(jí)比*高,所以a[10]是首先得到的,也就是先得到了一個(gè)數(shù)組,然后類型是int*,存放指針的數(shù)組,簡(jiǎn)稱指針數(shù)組。那么打()就可以避免先結(jié)合的問(wèn)題,直接表明了a是一個(gè)指針名,不是數(shù)組名了,也可以這么說(shuō),你的*要打在int的緊跟著的后面是為了強(qiáng)調(diào)*會(huì)被吸到int這邊,形成int*類型,(但其實(shí)是無(wú)所謂的!這么打都可以)如果被int吸附成int*,就代表這個(gè)變量里面存放的是int*,不然就還是int。而類型是int*類型的變量就是指針變量。我知道這里有的人會(huì)有爭(zhēng)議,有的人會(huì)說(shuō)沒(méi)有這種說(shuō)法,不嚴(yán)謹(jǐn),但是我們只是為了應(yīng)用,便于理解,所以這里就不爭(zhēng)端這個(gè)問(wèn)題了。打上括號(hào)有2個(gè)原因:1.不被int吸附形成int*類型? 2.不被a吸附直接形成數(shù)組。好了接下來(lái)回到上面的,回到黑體字部分。
int(*a)[10]就是a這個(gè)指針,指向了int [10],因?yàn)椋ǎ┧?沒(méi)有被吸附到int成為int*,而是留給了a,讓a成為了一個(gè)指針,脫離了數(shù)組名這個(gè)地址常量的范疇,int(*)[10]也就是指向了一個(gè)10個(gè)元素的整型數(shù)組的指針,簡(jiǎn)稱數(shù)組指針。是指針。因?yàn)閍發(fā)生變化了,我們可以看到(*a),a現(xiàn)在是指針類型。
接下來(lái)上圖:
?現(xiàn)在看我如何利用這一套理論秒殺!
int*(*a)[10]---第一部,去掉“變量名”,得到類型名,int*(*)[10],第二部:有一個(gè)*被吸附到int了,所以每一個(gè)變量里存放的是int*,然后再看,[10]說(shuō)明有10個(gè)int*,再看(*),這是一個(gè)指針了,()讓其沒(méi)有被任何人吸附,再聯(lián)系上面講述的幾種基本的名稱,這個(gè)指針指向了一個(gè)存放了10個(gè)int*的數(shù)組。
int** (*a)[10],一樣的,指針指向了一個(gè)存放了10個(gè)int**的數(shù)組。那么我們成功引出了二維指針的引子。
所以我們要補(bǔ)充以上的理論了,之前說(shuō)沒(méi)有括號(hào)*就會(huì)被吸附到int成為int*,沒(méi)有括號(hào),a[10]的a是地址常量,有括號(hào)int (*a)[10],不僅防止了int*,也讓a沒(méi)有和數(shù)組結(jié)合,而是被*形成了指針,形成了數(shù)組指針。(數(shù)組指針就是指向數(shù)組的指針)。所以這個(gè)括號(hào)“防”了兩邊。
但是如果有兩顆**,那么只有前面的一顆會(huì)被吸附,剩下一顆讓a變成指針變量。int* *a,我中間空格了,int*是變量存的類型,如果加上[10]的話只不過(guò)是這個(gè)存放類型的堆疊而已。但是沒(méi)有[10]就是每個(gè)變量存儲(chǔ)的類型,加上[10]才是變量名哦。
指針的維數(shù)看*的個(gè)數(shù),假設(shè)n維指針,那么前n-1個(gè)被int吸附,剩下一個(gè)被a吸附,形成指針,也就是a這個(gè)指針里面存放是int***(n-1個(gè)*),然后這int***(n-1個(gè)*)就是指它存放了一個(gè)指針的地址的地址的地址(n-1個(gè)的地址)。
int******(*a[10])[100]:第一部:去掉“變量名(再次提醒我們這里的變量名是變量名類似的東西,說(shuō)明白了就是把數(shù)組名當(dāng)初變量名,但它不是)”得到int******(*[10])[100],每個(gè)元素存放了int******,加上[10]就是變量的堆疊,也就是存放了100個(gè)int******的數(shù)組。括號(hào)里面是*[10],沒(méi)有(),所以被數(shù)組吸附了,是指針數(shù)組,代表這個(gè)數(shù)組存放了10個(gè)指針類型(把括號(hào)當(dāng)初一個(gè)整體,再一層一層看),而這個(gè)類型是int******[100],也就是一個(gè)有10個(gè)元素的指針數(shù)組,每個(gè)元素都指向了一個(gè)存放了100個(gè)int******的數(shù)組指針。
看到*a[]想到指針數(shù)組
看到(*a)[]想到數(shù)組指針
int******(**a[10])[100],這個(gè)寫法明顯錯(cuò)啦,我們說(shuō)過(guò)n維指針前面n-1個(gè)*會(huì)被吸附到int,所以必定不會(huì)出現(xiàn)(**a[10])的情況,也就是括號(hào)里面就一個(gè)*,代表它是一個(gè)指針,就可以了。其實(shí)也不會(huì)遇到這么復(fù)雜的。
下一篇文章繼續(xù)深入探究,帶你走進(jìn)不一樣的視角。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/124508.html
摘要:在位機(jī)器上,如果有個(gè)地址線,那一個(gè)指針變量的大小是個(gè)字節(jié),才能存放一個(gè)地址。就是一個(gè)指針變量,也有自己的類型,指針變量的類型我們可以發(fā)現(xiàn)指針的定義方式是類型星號(hào)。也就是說(shuō)存儲(chǔ)什么變量類型就用什么指針變量類型。 ...
摘要:需要注意的是用矩陣形式如行列表示二維數(shù)組,是邏輯上的概念,能形象地表示出行列關(guān)系。再次強(qiáng)調(diào)二維數(shù)組名如是指向行的。一維數(shù)組名如是指向列元素的。 哈嘍!這里是一只派大鑫,不是派大星。本著基礎(chǔ)不牢,地動(dòng)山搖的學(xué)習(xí)態(tài)度,從基礎(chǔ)的C語(yǔ)言語(yǔ)法講到算法再到更高級(jí)的語(yǔ)法及框架的學(xué)習(xí)。更好地讓同樣熱愛編...
目錄 前言 一、 什么是指針? 引例 計(jì)算機(jī)是怎么對(duì)內(nèi)存單元編號(hào)的呢? 內(nèi)存空間的地址如何得到 想存地址怎么辦? ? 本質(zhì)目的不是為了存地址 ?二、指針和指針類型 為什么有不同類型的指針 1.指針的解引用 2.指針+-整數(shù) 三、野指針 造成野指針的原因 1.未主動(dòng)初始化指針 ?2.指針越界訪問(wèn) 3.指針指向的空間釋放 規(guī)避野指針 四、指針運(yùn)算 1.指針+-整數(shù) ?2.指針-指針 ?3.指針的關(guān)系運(yùn)...
摘要:如果我們要將的地址保存到中,我們需要我們給指針變量相應(yīng)的類型。類型的指針是為了存放類型變量的地址這里可以看到,指針的定義方式是類型名指針變量名。如下最后本文介紹的是指針的基礎(chǔ)知識(shí),往后還會(huì)繼續(xù)深入講解指 ...
摘要:所以是數(shù)組指針,而是指針數(shù)組。因?yàn)閷?duì)一個(gè)二維數(shù)組,可以不知道有多少行,但是必須知道一行多少元素。當(dāng)二維數(shù)組數(shù)組名傳參,形參接收時(shí),數(shù)組的行可以省略,列不能省略,如果省略了列,我們就無(wú)法知道當(dāng)指針加減跳過(guò)幾個(gè)字節(jié)。 ...
閱讀 744·2023-04-26 02:03
閱讀 1101·2021-11-23 09:51
閱讀 1241·2021-10-14 09:42
閱讀 1809·2021-09-13 10:23
閱讀 1048·2021-08-27 13:12
閱讀 918·2019-08-30 11:21
閱讀 1066·2019-08-30 11:14
閱讀 1122·2019-08-30 11:09