傳值和傳指標,其實都是傳值
今天在完成資料結構作業時,一直無法給鍊錶(帶頭結點)插入新節點,一度以為是listinsert函式寫錯了,最後在leetcode群裡提問才知道,原來是initlist函式的問題
#include
#include
typedef
int elemtype;
typedef
struct lnodelinklist;
linklist *
initlist
(linklist *l)
linklist *
listinsert
(linklist *l,
int n,elemtype e)
temp=temp->next;
} linklist *s=
(linklist *
)malloc
(sizeof
(linklist));
s->data=e;
s->next=temp->next;
temp->next=s;
return l;
}void
displist
(linklist *l)
}int
main()
錯誤寫法
void
initlist
(linklist *l)
intmain()
分析:
傳值和傳指標,其實都是傳值,因此initlist(l)中『l』指的是結構體指標l的值,既結構體l的位址。
如果實參型別是指標,那麼形參應該是指向指標的指標
寫法一:曲線救國,通過函式返回指標
linklist *
initlist
(linklist *l)
intmain()
void
initlist
(linklist *
*l)int
main()
C語言 函式傳參 傳值 傳指標 傳指標的指標
本文參考這兩篇文章 文章 一 文章二。在學習資料結構中建立單鏈表的時候,疑惑 已經定義了node,用到結構體指標的時候直接用 node就好了,為什麼還要再定義乙個 linklist呢,為什麼傳參的時候又要用linklist l呢?下面我們就來循序漸進,由淺入深來解決問題,這裡舉兩個例子作為比較。首先...
C 傳值 傳引用和傳指標
相關概念 1 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資料傳遞稱為形實結合 2 引數傳遞方式 1 傳引數的值 稱值傳遞,簡稱傳值 2 傳引數的位址 稱位址傳遞,簡稱為傳址 3 引用傳遞 稱為傳引用 例項 includ...
函式傳值 傳指標和傳引用區別
函式傳值 傳值實際上是在子函式的棧裡面重新開闢乙個空間儲存傳進來的實參引數值,所以在子函式內對子函式的形參引數進行操作 賦值之類的 只是改變了子函式那個棧裡面的記憶體值,原函式的值並不會被改變,因為原函式的變數記憶體並未改變。指標傳值 情況1,原函式指標指向的值並沒有發生改變,對兩個指標操作相當於改...