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

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

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

怎么理解指針的指針?

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

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

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

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

int a;

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

wKgaomXYW6eAF520AAhEpgtfiMA992.jpg

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

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

int *p = &a;

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

wKgZomXYW6eAd6EAAAfU7kUaPSs671.jpg

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

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

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

int **q = &p;

q是個指針,指向變量 p,因為 p 本身也是個指針,所以就把 q 稱作指針的指針。

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

q = &a;

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

這個代碼完全行不通,因為 q 是 int ** 類型,它只能指向 int *類型的變量,比如 p 就是 int * 類型的變量,而 a 是 int 類型的變量。

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



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

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變成了一個合法的地址,程序就能順利運行。





審核編輯:劉清

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

    關(guān)注

    180

    文章

    7594

    瀏覽量

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

    關(guān)注

    1

    文章

    478

    瀏覽量

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

    關(guān)注

    0

    文章

    613

    瀏覽量

    28306

原文標題:怎么理解指針的指針?

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

收藏 人收藏

    評論

    相關(guān)推薦

    函數(shù)指針指針函數(shù)的概念

    不少朋友會混淆“函數(shù)指針”和“指針函數(shù)”這兩個概念,本文詳細介紹一下。
    發(fā)表于 03-09 10:49 ?1135次閱讀

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

    讓你不再害怕指針前言:復(fù)雜類型說明要了解指針,多多少少會出現(xiàn)一些比較復(fù)雜的類型,所以我先介紹一下如何完全理解一個復(fù)雜類型,要理解復(fù)雜類型其實很簡單,一個
    發(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ù)指針的時候,就有很多人弄不懂。下面就由小編詳細為大家介紹C語言中函數(shù)指針指針函數(shù)和函數(shù)指針之間的區(qū)別。
    發(fā)表于 11-16 15:18 ?3606次閱讀

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

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

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

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

    輕松理解C語言指針的實驗和詳細資料說明

    我并不打算使用過于官方、正統(tǒng)的語言來講解指針。因為如果我這樣做,就失去了做這個教程的意義。如果需要,大家完全可以從各大教材、網(wǎng)站找到對指針正規(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>的實驗和詳細資料說明

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

    我并不打算使用過于官方、正統(tǒng)的語言來講解指針。因為如果我這樣做,就失去了做這個教程的意義。如果需要,大家完全可以從各大教材、網(wǎng)站找到對指針正規(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>的詳細資料說明

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

    二級指針和多級指針的定義形式

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

    淺談指針常量和常量指針

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

    指針是什么

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

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

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

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

    在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應(yīng)用場景,對于提升嵌入式程序的效率
    的頭像 發(fā)表于 08-10 08:11 ?612次閱讀
    面試???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ù)組