1,以下**是有問題的:
裡有如下**
struct innrtc_t
;void
innrtc_init
(struct innrtc_t *rtc)
中有如下**
struct innrtc_t *innrtc;
innrtc_init
(innrtc)
;
這段**不能初始化innrtc這個結構體成員,原因是因為初始化的這些值只是對指標賦值,並沒有賦值到指標位址下的變數。innrtc相當於野指標。
2,下面的**是正確的:
**不變
**如下
struct innrtc_t innrtc;
innrtc_init
(&innrtc)
;//或者
struct innrtc_t *innrtc;
innrtc =
(struct innrtc_t *
)malloc
(sizeof
(struct innrtc_t));
if(innrtc ==
null
)innrtc_init
(&innrtc)
;// ... ...
free
(innrtc)
;
我的理解:
1,如果定義乙個結構體指標變數,就一定要為這個結構體指標變數賦值乙個有效的位址,否則因為結構體指標變數位址不明確,那之後得到的結構體成員值也不明確。
2,定義結構體變數而不是指標不會出現問題的原因,定義結構體變數編譯器會明確的把這個結構體變數分配到棧中,同樣使用malloc來申請一塊記憶體,編譯器會明確的把結構體指標分配到堆中,這都是有效位址,所以不會出錯。
結構體變數初始化
main.c c語言學習 include int main int argc,const charchar argv 初始化的4種方式 1.定義的同時初始化 struct person p1 2.先定義再逐個初始化 struct person p2 p2.name ykd p2.age 18 p2....
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...
結構體初始化
結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...