指針和引用

指針和引用

1. 引用和指針有什么區(qū)別擦俐?

  • 引用是 C++ 中新增的變量類(lèi)型,是對(duì) C 的一個(gè)擴(kuò)充握侧。引用給變量起一個(gè)別名蚯瞧,引用和對(duì)應(yīng)的變量代表同一個(gè)變量單元。
  • 指針是 C 語(yǔ)言中一個(gè)重要的數(shù)據(jù)類(lèi)型品擎。指針用于指向?qū)ο蟮牡刂纷粗瑥亩`活的實(shí)現(xiàn)對(duì)對(duì)象的操作。

區(qū)別:
(1)引用必須被初始化孽查,指針可以不用初始化饥悴;
(2)引用初始化以后就不能改變,而指針可以改變所指的對(duì)象盲再;
(3)不存在指向空值的引用西设,而指針可以指向一個(gè)空值;
(4)" sizeof(&a) " 得到的是所指向的變量(對(duì)象)的大小答朋,而 " sizeof(*p) " 得到的是指針本身的大写俊;

2. void 指針是空指針嗎梦碗?

void 指針一般被稱為通用指針禽绪,用于指向一個(gè)不屬于任何類(lèi)型的對(duì)象。和空指針完全是兩回事洪规。

3. 指針的定義

  • *int a[10];
    指針數(shù)組:一個(gè)有 10 個(gè)指針的數(shù)組印屁,該指針是指向一個(gè)整型數(shù)的
  • int (a)[10];*
    數(shù)組指針:一個(gè)指向有 10 個(gè)整型數(shù)數(shù)組的指針
  • int (a)(int);*
    函數(shù)指針:一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)
  • int (a[10])(int);*
    函數(shù)數(shù)組指針:一個(gè)有 10 個(gè)指針的數(shù)組斩例,且每個(gè)指針指向一個(gè)函數(shù)雄人,每個(gè)函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)

4. 各種復(fù)雜指針的聲明

  • float (**fa)[10]:fa 是一個(gè)二級(jí)指針,它指向的是一個(gè)一維數(shù)組的指針念赶,數(shù)組的元素都是 float础钠。
    先找到標(biāo)識(shí)符 fa恰力,它外面有一個(gè)圓括號(hào),先看括號(hào)內(nèi)旗吁。fa 的左邊是兩個(gè)緊挨著的 * 號(hào)踩萎,這說(shuō)明 fa 是一個(gè)二級(jí)指針;括號(hào)里面解析完畢很钓,看括號(hào)外面的右側(cè)香府,有一個(gè) [10] ,表明這個(gè)指針指向一個(gè)包含 10 個(gè)元素的一維數(shù)組履怯;再看括號(hào)的左邊回还,有一個(gè) float 表明這個(gè)一維數(shù)組是 float 類(lèi)型的。
  • double *(*sp)[10]:sp 是一個(gè)指針叹洲,它指向一個(gè)一維數(shù)組柠硕,該數(shù)組元素都是 double* 。
    sp 的左邊是一個(gè) * 號(hào)表示它是一個(gè)指針运提,跳出圓括號(hào)蝗柔,右邊是 [ ] 運(yùn)算符,表明這個(gè)指針指向一個(gè)一維數(shù)組民泵;再看左邊声离,是一個(gè) * 號(hào)赁濒,再左邊是 double 類(lèi)型,表明這個(gè)一維數(shù)組的元素都是指向 double 類(lèi)型的指針。
  • double(*arr[10])():arr 是一個(gè)數(shù)組斜友,arr 有十個(gè)元素皿哨,元素都是函數(shù)的指針滥比,指向的函數(shù)類(lèi)型是沒(méi)有參數(shù)且返回 double 的函數(shù)盗扇。

技巧:首先要找到要定義的標(biāo)識(shí)符,一個(gè)聲明里只能有一個(gè)要聲明的標(biāo)識(shí)符寥假。找到標(biāo)識(shí)符后市框,從標(biāo)識(shí)符所在最里面的括號(hào)看起,先往右看糕韧,再往左看枫振。每當(dāng)遇到圓括號(hào)就調(diào)轉(zhuǎn)閱讀方向。括號(hào)里面的內(nèi)容解析完成后就跳出括號(hào)重復(fù)這個(gè)過(guò)程直到結(jié)束萤彩。

5. 指針與函數(shù)

下面 3 個(gè)函數(shù)中有指針問(wèn)題的是:

int *f1(void)
{
    int x = 123;
    return (&x);
}

int *f2(void)
{
    int *p;
    *p = 123;
    return p;
}

int *f3(void)
{
    int *p;
    p = (int*) malloc(sizeof(int));
    return p;
}

函數(shù) f1 返回一個(gè)局部變量的指針粪滤,而局部變量是保存在棧中的,退出函數(shù)后乒疏,局部變量就銷(xiāo)毀了额衙,保留其指針沒(méi)有意義,因?yàn)槠渲赶虻臈怕吴?臻g可能被其它變量覆蓋了窍侧。

函數(shù) f2 也有問(wèn)題,p 是局部變量转绷,未初始化伟件,它的值是未知的,*p 不知道指向哪里了议经,直接給 *p 賦值可能會(huì)覆蓋該位置的重要的內(nèi)容斧账,會(huì)引起不可預(yù)料的錯(cuò)誤。

函數(shù) f3 使用指針指向了一塊新申請(qǐng)的內(nèi)存煞肾,然后返回這塊內(nèi)存的地址咧织,所以沒(méi)有問(wèn)題。

6. 什么是 “ 野指針 ” 籍救?

闡釋對(duì) “ 野指針 ” 的理解习绢,它又是如何產(chǎn)生的以及對(duì)程序有什么影響?


“ 野指針 ” 是在定義指針后沒(méi)有對(duì)其進(jìn)行初始化蝙昙,或者指針指向的內(nèi)存被釋放闪萄,而指針沒(méi)有被設(shè)置為 NULL 。野指針隨機(jī)指向一個(gè)地址奇颠,使用這個(gè)指針進(jìn)行操作時(shí)败去,就會(huì)更改該內(nèi)存的數(shù)據(jù),造成程序數(shù)據(jù)的破壞烈拒,嚴(yán)重威脅程序的安全圆裕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荆几,隨后出現(xiàn)的幾起案子吓妆,更是在濱河造成了極大的恐慌,老刑警劉巖伴郁,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耿战,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡焊傅,警方通過(guò)查閱死者的電腦和手機(jī)剂陡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狐胎,“玉大人鸭栖,你說(shuō)我怎么就攤上這事∥粘玻” “怎么了晕鹊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我溅话,道長(zhǎng)晓锻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任飞几,我火速辦了婚禮砚哆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屑墨。我一直安慰自己躁锁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布卵史。 她就那樣靜靜地躺著战转,像睡著了一般。 火紅的嫁衣襯著肌膚如雪以躯。 梳的紋絲不亂的頭發(fā)上槐秧,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音寸潦,去河邊找鬼色鸳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛见转,可吹牛的內(nèi)容都是我干的命雀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼斩箫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吏砂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起乘客,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狐血,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后易核,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體匈织,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年牡直,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缀匕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碰逸,死狀恐怖乡小,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饵史,我是刑警寧澤满钟,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布胜榔,位于F島的核電站,受9級(jí)特大地震影響湃番,放射性物質(zhì)發(fā)生泄漏夭织。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一牵辣、第九天 我趴在偏房一處隱蔽的房頂上張望摔癣。 院中可真熱鬧奴饮,春花似錦纬向、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至投剥,卻和暖如春师脂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背江锨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工吃警, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啄育。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓酌心,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親挑豌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子安券,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 一.指針 ** 1.指針概念**:指針就是用來(lái)保存內(nèi)存地址的變量。 2.聲明指針的方式:int *p氓英;與運(yùn)算符*結(jié)...
    YBshone閱讀 412評(píng)論 0 4
  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類(lèi)型侯勉。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)铝阐; ...
    朱森閱讀 3,440評(píng)論 3 44
  • 從概念上講址貌。指針從本質(zhì)上講就是存放變量地址的一個(gè)變量,在邏輯上是獨(dú)立的徘键,它可以被改變练对,包括其所指向的地址的改變和其...
    IvanRunning閱讀 371評(píng)論 0 1
  • 指針和引用的區(qū)別: 主要是兩點(diǎn): 引用使用時(shí)必須非空即必須初始化為非空值,指針則初始化時(shí)可以為空啊鸭; 引用初始化后不...
    geaus閱讀 549評(píng)論 0 0
  • 據(jù)說(shuō)锹淌,古代有個(gè)叫楊朱的哲學(xué)家遇到路的岔口而大哭,因?yàn)椴砜谝馕吨x擇赠制,人在一條路上一旦做出了選擇赂摆,就意味著另一條路的...
    李野航閱讀 196評(píng)論 2 6