結構體指標變數初始化問題

2021-10-11 16:24:06 字數 908 閱讀 3850

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