[C語言] 指標教學[七]: 多重指標. 一般指標 - Medium
文章推薦指數: 80 %
我們承襲上一例雙重指標一個雙重指標變數ptr2 指向ptr1 的例子,這裡我們在宣告一個三重指標***ptr3 ,假設它的位址是0x2e,它指向了ptr2,ptr2 再 ...
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWrite[C語言]指標教學[七]:多重指標一般指標這裡我們先宣告一個指標*ptr1來只到變數a,這邊我們假設變數a的位址為0x0a,而ptr1的位址是0x16,變數a的數值設為10,則情況會如下圖所示指標ptr1而實際在寫程式碼的時候,我們宣告了一個變數a,並賦值為10,接著再宣告一個指標變數*ptr並指到變數a,這時候我們去看ptr1所存的數值時,一定就是a的位址,而*ptr就會跟a的數值一樣。
以下是輸出結果,這一次是我某一次的編譯結果,每一次作業系統會給變數的虛擬記憶體位址都是不一定的,但是我們可以清楚的看到ptr1的數值就是存取a的位址,而*ptr1的數值當然就是跟變數a一樣,也就是10Theaddressofais0x7ffe91f80e3cTheaddressofptr1is0x7ffe91f80e40Thevalueofptr1is0x7ffe91f80e3cvalueofa:10valueof*ptr1(pointtovariablea):10雙重指標那我們宣告一個指標變數,可以去指一個變數,那我們可不可以宣告一個指標變數,去指這個指標,而原本的指標因為指向了一個變數,所以這個指標變數最終也會指向變數。
這樣講有點拗口,我們承襲上一例。
在上一例中,有一個指標變數ptr1指向變數a,而我們今天再宣告一個指標變數**ptr2,用它來指向ptr1,我們最終就可以用這個變數指向a。
假定這個ptr2的位址為0x22,則我們可以讓這個ptr2指向ptr1,最終藉由ptr1指到變數a雙重指標ptr2程式碼這裡我們用雙重指標ptr2來指向ptr1。
輸出結果以下是輸出結果,這一次是我某一次的編譯結果,每一次作業系統會給變數的虛擬記憶體位址都是不一定的這裡我們可以看到ptr2所存的位址0x7fffcbe41e38,其實就是ptr1的位址,而*ptr2所顯示的值一定是ptr1所存的數值,也就是a的位址,所以這個數值0x7fffcbe41e34一定會跟ptr1的數值以及a的位址一樣。
最後,我們可以把**ptr2印出來,**ptr2最終指向了a並會得到a所存的數值,所以我們在最後**ptr2的數值,會跟*ptr1以及a的數值一樣。
Theaddressofais0x7fffcbe41e34Theaddressofptr1is0x7fffcbe41e38Theaddressofptr2is0x7fffcbe41e40Thevalueofptr1is0x7fffcbe41e34Thevalueofptr2is0x7fffcbe41e38Thevalueof*ptr2is0x7fffcbe41e34valueofa:10valueof*ptr1(pointtovariablea):10valueof**ptr2(pointtovariablea):10三重指標那既然有雙重指標,是否也有三重指標,答案是肯定的。
我們承襲上一例雙重指標一個雙重指標變數ptr2指向ptr1的例子,這裡我們在宣告一個三重指標***ptr3,假設它的位址是0x2e,它指向了ptr2,ptr2再指向了ptr1,ptr1最終指向了變數a三重指標ptr3程式碼這裡我們用三重指標ptr3來指向ptr2。
輸出結果以下是輸出結果,這一次是我某一次的編譯結果,每一次作業系統會給變數的虛擬記憶體位址都是不一定的這裡我們可以看到,ptr3的數值,一定是儲存著ptr2的位址,所以兩者都是0x7ffc07469ec8*ptr3,代表著ptr2所儲存的數值,也就是ptr1的位址,所以三者的數值皆會是0x7ffc07469ec0**ptr3,代表著,代表著ptr1所儲存的數值,也就是變數a的位址,所以三者皆為0x7ffc07469ebc最後***ptr3所呈現的,當然就是a的數值,兩者皆為10,當然這個數值會與*ptr1與**ptr2相同Theaddressofais0x7ffc07469ebcTheaddressofptr1is0x7ffc07469ec0Theaddressofptr2is0x7ffc07469ec8Theaddressofptr3is0x7ffc07469ed0Thevalueofptr1is0x7ffc07469ebcThevalueofptr2is0x7ffc07469ec0Thevalueofptr3is0x7ffc07469ec8Thevalueof*ptr2is0x7ffc07469ebcThevalueof*ptr3is0x7ffc07469ec0Thevalueof**ptr3is0x7ffc07469ebcvalueofa:10valueof*ptr1(pointtovariablea):10valueof**ptr2(pointtovariablea):10valueof***ptr3(pointtovariablea):10總結多重指標的概念或許有點抽象複雜,但其實只要釐清調理,一層一層的邏輯解析,其實就可以理解箇中道理。
--MorefromMuLongPuYangFollowLovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstartedMuLongPuYang171FollowersFollowMorefromMediumEckyAlimansyahSmallWinsMarcRobinsHowtoStopSmoking!AmandaRamin{CI4311W}Week1MuralySrinarayanathasWhyIsItImportantForImmigrantsToLearnAndUnderstandWeb3?HelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1【c】C語言中的三重指標:這是樣式問題嗎? - 程式人生
【c】C語言中的三重指標:這是樣式問題嗎? ... 從基礎開始,單指標有兩個用途:建立陣列和允許函式更改其內容(按引用傳遞): char *a; a = malloc.
- 2C++ 指標的基本宣告以及指標的指標(雙重指標、三重指標...)
這篇文章主要用來記錄學習指標基本的宣告規則以及雙重指標、三重指標…等多重指標之間的存取關係先從最 ... C++ 字元陣列(C-style)、字元指標、String類別使用方式整理.
- 3C 語言測試: 指標 - 小狐狸事務所
C 語言允許多重指標, 但因較複雜而用得不多. 宣告多重指標的方式是使用連續的"*", 例如: char ***ppp; //宣告三重指標ppp 從下面範例可以觀察三重指標 ...
- 4C/C++ 指標和雙重指標以及三重指標 - Follow Fang!
C/C++ 指標和雙重指標以及三重指標. 指標在C語言內是一個很重要的元素,指標可以指到任何的位置,不過要小心使用,能指到記憶體位置,就代表可以透過 ...
- 5C++ 指標的基本宣告以及指標的指標(雙重指標、三重指標...)
c++ 专栏收录该内容. 6 篇文章 0 订阅. 订阅专栏. 這篇文章主要用來記錄學習指標基本的宣告規則以及雙重指標、三重指標…等多重指標之間的存取關係.