C語言指標的形象理解 自己編寫

2021-08-02 07:15:15 字數 1478 閱讀 5077

此段為引用:

鍊錶指標是c語言的乙個難點,但也是重點,學懂了非常有用。要仔細講就必須先講變數、指標。

什麼是變數?所謂變數,不要淺顯的認為會變得量就是變數。套用我們院長的問話:「教室變不變?」變,因為每天有不同的人在裡面上課,但又不變,因為教室始終在那,沒有變大或變小。這就是變數:有乙個不變的位址和一塊可變的儲存空間。正常情況下,我們只看到變數這個房間裡面的東西,也就是其內容,但不會關注變數的位址,但是c語言的指標,就是這個房間的位址。我們宣告變數就相當於蓋了間房子存放東西,我們可以直接**房子裡的東西,而宣告指標,就是相當於獲得了乙個定位器,當用指標指向某個變數時,就是用指標給變數定位,以後我們就可以用指標找到他所「跟蹤」的變數並可以獲得裡面的內容。

那結構體呢?結構體就相當於是有好幾個房子組成的別墅,幾個房子繫結在一起使用。假設現在有很多這種別墅分布在乙個大迷宮裡,每間別墅裡都有一間房子。裡面放了另乙個別墅的位置資訊,現在你手拿定位器找到了第一棟別墅,從裡面得到了你想要的東西(鍊錶的資料部分),然後把下一棟別墅的位置計入你的定位器(p = p->next),再走向下一棟別墅……如此走下去,知道走到某地下一棟別墅資訊沒有了(p->next == null),你的旅行結束。這就是鍊錶一次遍歷的過程。現在你能明白 p=p->next的含義了吧!

寫了這麼多。希望你能明白。

如果想學好c和c++,鍊錶和指標必須熟練掌握!

以下為自己總結:

當定義乙個變數 unsigned int x; 此時有兩重意思:

1. 向記憶體申請了一塊區域,申請的記憶體位址是&x,大小是4個byte;

2. 可以直接更改此處記憶體裡的值,如 x=1。

在實際應用中,我們偏於意思2,只注重軟體層面的理解,而忽略了意思1(硬體層面)。

而指標的使用更偏重硬體層面的意思。如上面的描述,指標就是房間的位址,指定後不管所指記憶體內的資料如何變化,都可以定位跟蹤。

結構體的指標其實可以理解為一段記憶體位址的指標,這段記憶體的大小,由結構體內變數的定義決定。

如,unsigned char * a;   只能跟蹤乙個byte大小的記憶體;

unsigned int * b; 可以跟蹤4個byte大小的記憶體,但這4個byte是同時被賦值的;

但如果定義結構體

struct p  

那 struct p * t; 結構體指標t可跟蹤的是連續的一段記憶體,即4個byte、1個byte及另乙個結構體的大小。並且可對其跟蹤的記憶體分段,單獨賦值

t->x = 1; 

t-> y = 2;

從彙編的語義上講, p 是乙個不完整的位址,或者說,半個位址,再或者說,乙個指向的東西是虛構出來的位址。而 x 和 y 各是在 point 結構中的位址偏移量。也就是說,必須有 p 和 x 或者 p 和 y 同時出現,才形成乙個完整的位址,單獨的乙個 p 沒有意義**自:

在32位微控制器中,其韌體庫定義暫存器位址就是用的這種方法(取代了c51的sfr)。詳情可參考《零死角玩轉stm32-f429》的第五章。

C 中this指標的形象理解

關於this指標的乙個精典回答 當你進入乙個房子後,你可以看見桌子 椅子 地板等,但是房子你是看不到全貌了。對於乙個類的例項來說,你可以看到它的成員函式 成員變數,但是例項本身呢?this是乙個指標,它時時刻刻指向你這個例項本身。個人理解 ps class類就好比這座房子,this就好比一把鑰匙,通...

C語言指標的理解

什麼是指標?指標也是一種變數,存放的是某塊記憶體的位址。我們知道,記憶體可以理解為是按位元組被分割成若干塊的,每一位元組都對應著乙個編號,並且這些編號從小到大依次排列,這個編號就是它的位址,獨一無二,而指標變數中的值就是這些編號 例如如下 的結果 include include int main 這...

C語言指標的理解

include intmain int p1 2 p2 2 p3,p4,p5 宣告2個陣列指標,和3個普通指標 p1 arr 記住p1是陣列指標,是指向陣列的 printf d n p1 0 輸出陣列裡的第乙個元素 p1 指標自增,自增按陣列單位自增,這裡看成一維陣列的話,乙個陣列單位就是3,相當於...