精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

怎么理解指針的指針?

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

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

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

先有一個變量,假設它是整型,在系統中占 4 個字節。

int a;

內存是以字節為單位,每個字節都有一個地址,所以變量 a 占了4個地址。

wKgaomXYW6eAF520AAhEpgtfiMA992.jpg

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

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

int *p = &a;

我們也經常說,指針 p 指向變量 a。

wKgZomXYW6eAd6EAAAfU7kUaPSs671.jpg

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

指針的指針也屬于指針,所以在內存中也占 4 個字節。

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

int **q = &p;

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

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

q = &a;

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

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

關于指針的指針,有個極其經典的筆試題,如果你刷過題,那你一定會遇到。



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

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


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





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136182
  • 指針
    +關注

    關注

    1

    文章

    480

    瀏覽量

    70509
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28329

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

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【設計技巧】指針的使用注意事項:空指針指針賦值、void *指針

    前面的文章,分析了指針的一些概念,可以說指針是C的靈魂,看起來簡單,但是想要理解透徹卻是相當難,需要大量的練習,不斷的鞏固,不斷的重復才能盡可能的理解
    發表于 08-20 08:30

    指針的用法總結,指針用法大全

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

    C和指針習題答案配C和指針

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

    c語言函數指針定義,指針函數和函數指針的區別

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

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

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

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

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

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

    我并不打算使用過于官方、正統的語言來講解指針。因為如果我這樣做,就失去了做這個教程的意義。如果需要,大家完全可以從各大教材、網站找到對指針正規的解釋。但無疑,這種正規、一絲不茍的解釋卻沒法帶領大家,尤其是學習C語言的新手,來輕松的領悟
    發表于 04-11 16:08 ?10次下載
    輕松<b class='flag-5'>理解</b>C語言<b class='flag-5'>指針</b>的實驗和詳細資料說明

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

    我并不打算使用過于官方、正統的語言來講解指針。因為如果我這樣做,就失去了做這個教程的意義。如果需要,大家完全可以從各大教材、網站找到對指針正規的解釋。但無疑,這種正規、一絲不茍的解釋卻沒法帶領大家,尤其是學習C語言的新手,來輕松的領悟
    發表于 05-08 17:48 ?11次下載
    如何輕松<b class='flag-5'>理解</b>C語言<b class='flag-5'>指針</b>的詳細資料說明

    理解函數指針、函數指針數組、函數指針數組的指針

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

    C語言指針理解使用

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

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

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

    淺談指針常量和常量指針

    這節課我們來講一講指針常量和常量指針
    的頭像 發表于 02-21 09:27 ?1036次閱讀

    指針是什么

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

    函數指針指針函數是不是一個東西?

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

    面試常考+1:函數指針指針函數、數組指針指針數組

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