今天在實現乙個單鏈表的時候,想借助乙個函式完成煉表頭節點的初始化
#include
#include
// this program is to give an examble of single list
// this program contain three algorithem . those are insert,delect and print
typedef struct node lnode;
int init(lnode* head);
int main(void)
;head->next=null;
head->data=0;
return 1;
}程式編譯,執行,當在main函式中引用head的值的時候,程式報錯並退出。經過仔細分析,在使用函式對head進行初始化的時候,指標的使用出啦問題:
這個問題可以這樣描述:程式呼叫init對和head進行初始化的時候,傳送啦head的值(乙個隨機的位址),init函式中,head是乙個臨時的指標,其存放的是主函式中傳遞過來的值。這個值又被分配的malloc分配的空間位址覆蓋。函式沒有返回值,所以當函式呼叫結束後,在子函式中分配的記憶體就被洩漏出去啦,找不到啦。主函式中的head指標的值沒有發生改變,指向乙個隨機分配的空間,當引用這個指標的時候,就發生啦錯誤。
這個問題對指標使用有一定的啟示,在使用指標的函式呼叫中,指標的作用是傳遞它所指空間的位址,只能改變所指空間裡的內容,而不能改變源指標變數的值。
用建構函式來完成結構體的初始化
說到結構體的初始化,人們會自然的想到先定義乙個結構體變數,然後對其中的元素逐一賦值,以達到初始化的目的。但是如果這樣做,當結構體內變數很多時並不方便,此處介紹一種使用 建構函式 的方法來進行初始化,供讀者學習。所謂建構函式就是用來初始化結構體的一種函式,它直接定義在結構體中。建構函式的乙個特點是它不...
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...
結構體初始化
結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...