C語言指標深入理解

2021-06-01 20:46:44 字數 1043 閱讀 9550

前幾天看了乙個程式,裡面一段關於指標的**讓我非常糾結,看了很久才看懂,在這裡將將其記錄下來,希望能對大家有一定的幫助,先看示例程式(編譯器gcc):

#include

#include

#include

typedef struct list_node

list_node, list, *plist_node;

static list *lst = null;

void insert(int dat)

int remove_item(int dat)

else

}return cnt;

}void print_list()

printf("\n");

}int main()

;for(i = 0; i < 10; i++)

print_list();

cnt = remove_item(1);

print_list();

printf("%d\n", cnt);

return 0;

}本文主要要講的內容主要是remove_item函式中的兩句:a、*ppn = pn->next; b、ppn = &(pn->next),乍一看這兩句不是他媽的乙個意思嗎?怎麼就實現了刪除呢?

分析:為了方便敘述(實際上是為了少打點字),在下面的敘述中做一些簡化,如6的next的指標是指煉表中data域為6的項的next指標的指標

在main函式中,鍊錶插入完成後為:1 6 3 1 2 9 1 3 6 1

在刪除第乙個1時,*ppn = lst,pn = lst,所以,在執行a後,lst指向了6;接著由於if語句不成立,將執行b,在執行完b後,ppn指向的是6的next的指標,如此一直到鍊錶中第二個1時,ppn指向的是前一項的next的指標(3的next的指標),這是if條件滿足,執行a,此時實際上是將3的next指標指向1的下一項,而pn指向的又是1所在的項,這樣就可以完成第二個1的刪除。以此類推就可以完成對1的所有刪除。

是不是有點暈了,總之我是有點暈了,表述的不好,求文采好的同學修飾一下這段文字,使其更容易理解。

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言指標(二)

1.c語言記憶體分配 棧區 stack 由系統自動分配釋放,存放函式的引數值,區域性變數等資訊。堆區 heap 由程式設計師分配釋放,系統會在程式結束時 全域性區 靜態區 全域性和靜態變數存放在這裡,由系統 文字常量區 存放常量字串,由系統 程式 區 c語言堆內空間申請函式為 malloc size...