在函式中完成結構體的初始化

2021-06-21 14:11:47 字數 739 閱讀 4896

今天在實現乙個單鏈表的時候,想借助乙個函式完成煉表頭節點的初始化

#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語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...