在使用C語言指標時的的乙個不容易發現的陷阱

2022-09-23 20:06:16 字數 518 閱讀 6948

今天晚上被一段**弄得糾結了半天,最後發現了在使用c語言指標時的的乙個不容易發現的陷阱。

請看下面兩段**,考慮其功能有何不同:

**段1:

t=q->next;

p->next=q->next->next;

q=p=p->next;

free(t);**段2:

p->next=q->next->next;

t=q->next;

q=p=p->next;

free(t);其中最主要的不同點就在於「t=q->next;」的位置不同。

在**段1中,t指向的q的下乙個節點,但在**段2中,t指向得卻是q的下乙個節點的下乙個節點,陷阱就在這裡!

注意,乙個節點的next域是固定的,當修改了節點的next域後,不管有多少指標指向這個節點,那麼,這些指標的next節點均為修改後的節點,所以,以後要想刪除某個節點後的節點時,必須要做到**段1中的處理方法,先找乙個指標指向下乙個節點,這樣,不管怎麼修改那個節點的next域,都不會對他的下乙個節點產生影響。

記乙個關於C語言函式指標使用的小例子

首先回顧函式指標的宣告方式 以乙個返回值為空的有乙個int型別引數的函式指標為例 void func int 函式 void func int 函式指標 void func 5 int 函式指標的陣列下面兩份 給出乙個返回值為函式指標的函式的例子,演示宣告該類函式的兩種不同方式,以及函式指標的使用。...

雙指標的乙個使用例項

什麼是雙指標?例如 char p p即為雙指標。當我們需要修改指標變數本身的值的時候,可以使用雙指標。先看乙個示例 voidgetmemory char ptr voidgetbuffer 示例想要修改buffer本身這個指標的值,但是getmemory buffer 之後,buffer的值還是nu...

C 使用成員函式指標的乙個例子

進行單元測試,要測試乙個類的功能,下面這個測試類一共有三部分功能測試,每種測試分別在乙個函式中完成,然後可以通過鍵盤輸入控制測試模組是否執行。開始 寫成這樣 class pendulumtest void pendulumtest run void 感覺run函式的 太難看了,於是就使用成員函式指標...