0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么理解指針的指針?

學(xué)益得智能硬件 ? 來源:學(xué)益得智能硬件 ? 2024-02-23 16:46 ? 次閱讀

怎么理解指針的指針?其實(shí)這個(gè)概念并不難,只是把它放到實(shí)際應(yīng)用中,容易造成困擾。

指針的指針還得先從指針講起。

先有一個(gè)變量,假設(shè)它是整型,在系統(tǒng)中占 4 個(gè)字節(jié)。

int a;

內(nèi)存是以字節(jié)為單位,每個(gè)字節(jié)都有一個(gè)地址,所以變量 a 占了4個(gè)地址。

wKgaomXYW6eAF520AAhEpgtfiMA992.jpg

C語言中,描述變量 a 的地址,一般取最前面的這個(gè)字節(jié),所以 a 的地址是 0x100。

為了方便計(jì)算,很多時(shí)候我們想把 0x100 保存下來,于是又需要一個(gè)變量,這個(gè)變量就是指針變量。指針的大小跟環(huán)境有關(guān)系,這里假設(shè)占 4 個(gè)字節(jié)。用代碼來表示,可以寫成:

int *p = &a;

我們也經(jīng)常說,指針 p 指向變量 a。

wKgZomXYW6eAd6EAAAfU7kUaPSs671.jpg

既然 p 在內(nèi)存中占了 4 個(gè)字節(jié),那他肯定也有個(gè)地址,假設(shè)這個(gè)地址是 0x1000,如果想把 0x1000 保存下來,那就需要指針的指針。

指針的指針也屬于指針,所以在內(nèi)存中也占 4 個(gè)字節(jié)。

如果用代碼來表示,可以寫成:

int **q = &p;

q是個(gè)指針,指向變量 p,因?yàn)?p 本身也是個(gè)指針,所以就把 q 稱作指針的指針。

雖然 q 和 p 都是指針,但是也不能隨便賦值,比如能不能寫成:

q = &a;

q是指針,&a是地址,地址賦值給指針,簡直完美。

這個(gè)代碼完全行不通,因?yàn)?q 是 int ** 類型,它只能指向 int *類型的變量,比如 p 就是 int * 類型的變量,而 a 是 int 類型的變量。

關(guān)于指針的指針,有個(gè)極其經(jīng)典的筆試題,如果你刷過題,那你一定會(huì)遇到。



這個(gè)題目問題就出在實(shí)參和形參是兩塊不同的內(nèi)存,malloc申請(qǐng)的內(nèi)存,地址記在了形參中,對(duì)實(shí)參沒有任何的影響,所以在主函數(shù)中,實(shí)參一直是空,把字符串拷貝進(jìn)去,就會(huì)出現(xiàn)段錯(cuò)誤。

void init_memory(char **s)
{
    *s = malloc(128);     
}


int main()
{
    char *str = NULL;
    
    init_memory(&str);
    
    strcpy(str, "helloworld");
            
    return 0;
}
修改的方法就是傳指針 str 的地址,形參改成指針的指針,于是就出現(xiàn)了 s 指向 str,*s 就是 str,執(zhí)行init函數(shù),str從NULL變成了一個(gè)合法的地址,程序就能順利運(yùn)行。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136841
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    480

    瀏覽量

    70564
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28371

原文標(biāo)題:怎么理解指針的指針?

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言中指針數(shù)組和數(shù)組指針的區(qū)別

    指針和數(shù)組之間存在著緊密的關(guān)系。在本文中,我們將探討指針和數(shù)組的關(guān)系、指針算術(shù)和數(shù)組遍歷、多維數(shù)組與指針以及指針數(shù)組和數(shù)組
    發(fā)表于 08-17 15:29 ?413次閱讀

    指針的用法總結(jié),指針用法大全

    讓你不再害怕指針前言:復(fù)雜類型說明要了解指針,多多少少會(huì)出現(xiàn)一些比較復(fù)雜的類型,所以我先介紹一下如何完全理解一個(gè)復(fù)雜類型,要理解復(fù)雜類型其實(shí)很簡單,一個(gè)
    發(fā)表于 10-14 17:51 ?87次下載

    C和指針習(xí)題答案配C和指針

    C和指針習(xí)題答案配C和指針
    發(fā)表于 09-07 14:29 ?6次下載
    C和<b class='flag-5'>指針</b>習(xí)題答案配C和<b class='flag-5'>指針</b>

    c語言函數(shù)指針定義,指針函數(shù)和函數(shù)指針的區(qū)別

     往往,我們一提到指針函數(shù)和函數(shù)指針的時(shí)候,就有很多人弄不懂。下面就由小編詳細(xì)為大家介紹C語言中函數(shù)指針,指針函數(shù)和函數(shù)指針之間的區(qū)別。
    發(fā)表于 11-16 15:18 ?3627次閱讀

    深入理解C指針(C/C++程序員進(jìn)階必備,透徹理解指針與內(nèi)存管理)pdf

    深入理解C指針
    發(fā)表于 03-21 09:42 ?118次下載

    為什么使用指針?C++中的“指針

    為什么使用指針?因?yàn)樵诓僮鞔笮蛿?shù)據(jù)和類時(shí),指針可以通過內(nèi)存地址直接訪問數(shù)據(jù),可避免在程序中復(fù)制大量的代碼,因此指針的效率最高。一般來說,指針會(huì)有3大用途
    的頭像 發(fā)表于 10-04 10:33 ?5141次閱讀

    輕松理解C語言指針的實(shí)驗(yàn)和詳細(xì)資料說明

    我并不打算使用過于官方、正統(tǒng)的語言來講解指針。因?yàn)槿绻疫@樣做,就失去了做這個(gè)教程的意義。如果需要,大家完全可以從各大教材、網(wǎng)站找到對(duì)指針正規(guī)的解釋。但無疑,這種正規(guī)、一絲不茍的解釋卻沒法帶領(lǐng)大家,尤其是學(xué)習(xí)C語言的新手,來輕松的領(lǐng)悟
    發(fā)表于 04-11 16:08 ?10次下載
    輕松<b class='flag-5'>理解</b>C語言<b class='flag-5'>指針</b>的實(shí)驗(yàn)和詳細(xì)資料說明

    如何輕松理解C語言指針的詳細(xì)資料說明

    我并不打算使用過于官方、正統(tǒng)的語言來講解指針。因?yàn)槿绻疫@樣做,就失去了做這個(gè)教程的意義。如果需要,大家完全可以從各大教材、網(wǎng)站找到對(duì)指針正規(guī)的解釋。但無疑,這種正規(guī)、一絲不茍的解釋卻沒法帶領(lǐng)大家,尤其是學(xué)習(xí)C語言的新手,來輕松的領(lǐng)悟
    發(fā)表于 05-08 17:48 ?11次下載
    如何輕松<b class='flag-5'>理解</b>C語言<b class='flag-5'>指針</b>的詳細(xì)資料說明

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針
    的頭像 發(fā)表于 06-29 15:38 ?1.5w次閱讀
    <b class='flag-5'>理解</b>函數(shù)<b class='flag-5'>指針</b>、函數(shù)<b class='flag-5'>指針</b>數(shù)組、函數(shù)<b class='flag-5'>指針</b>數(shù)組的<b class='flag-5'>指針</b>

    C語言指針理解使用

    C語言指針理解使用指針變量的聲明給普通變量的賦值對(duì)比給指針變量的賦值代*的指針的使用說明指針
    發(fā)表于 01-13 13:42 ?3次下載
    C語言<b class='flag-5'>指針</b>的<b class='flag-5'>理解</b>使用

    二級(jí)指針和多級(jí)指針的定義形式

    指針變量作為一個(gè)變量也有自己的存儲(chǔ)地址,而指向指針變量的存儲(chǔ)地址就被稱為指針指針,即二級(jí)指針。
    的頭像 發(fā)表于 10-18 16:38 ?1907次閱讀

    淺談指針常量和常量指針

    這節(jié)課我們來講一講指針常量和常量指針
    的頭像 發(fā)表于 02-21 09:27 ?1078次閱讀

    指針是什么

    指針是什么? 1.1 淺談指針 理解指針的 兩個(gè)要點(diǎn): 指針是內(nèi)存中一個(gè)最小單元的編號(hào),也就是地址; 平時(shí)口語中說的
    的頭像 發(fā)表于 11-24 15:50 ?2156次閱讀
    <b class='flag-5'>指針</b>是什么

    函數(shù)指針指針函數(shù)是不是一個(gè)東西?

    函數(shù)指針的本質(zhì)是指針,就跟整型指針、字符指針一樣,函數(shù)指針指向的是一個(gè)函數(shù)。
    的頭像 發(fā)表于 01-03 16:35 ?535次閱讀
    函數(shù)<b class='flag-5'>指針</b>和<b class='flag-5'>指針</b>函數(shù)是不是一個(gè)東西?

    面試常考+1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應(yīng)用場(chǎng)景,對(duì)于提升嵌入式程序的效率
    的頭像 發(fā)表于 08-10 08:11 ?861次閱讀
    面試???1:函數(shù)<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數(shù)、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組