#結構體的初始化及內部成員儲存方式
定義乙個結構體,它的地位和 int 等內建型別地位是一樣的,在使用方法上也大體相同,比如我們可以用用乙個結構體初始化另乙個結構體
struct student s3 = s1;也可以像普通變數在傳參時有按值傳遞和按址傳遞。
注意:定義結構體在花括號外面一定要加分號。
按值傳遞想當於重新拷貝了乙份資料給呼叫函式,呼叫函式對結構體變數的資料進行修改時不會對原來的內容進行修改。
而按位址或引用傳遞時,呼叫函式的修改是對結構體變數本身進行操作。和 int 等系統內建型別資料的操作方法是相同的。(按引用傳遞也可以認為是按位址傳遞。)
#include
#include
#include
struct point
;struct student
;int
main()
},}}
;//2
struct student s3;
s3.id =3;
strcpy
(s3.name,
"people3");
//注意給s3.name賦值,一定要用複製函式,s3.name = 「people3」這種寫法錯誤,
s3.pos.x =1;
s3.pos.y =1;
return0;
}
這裡展示兩種初始化方式:整體初始化和逐個初始化。
方式 1 是整體初始化,定義乙個結構體陣列,陣列有兩個元素,由於結構體是順序儲存,我們需要按照定義結構體的順序給每個成員來賦值,內部的花括號是為了程式可讀性,我們也可以寫作:結構體成員的儲存方式為順序儲存,當結構體中資料成員變得複雜時,還會涉及到記憶體對齊的問題,但總體上依然是順序儲存。struct student s[2] = ;
方式2是逐個初始化,當我們進行逐個初始化的時候,語句 2.1,2.2,2.3,2.4,2.5 的順序完全可以隨意安排。只是有一點要注意,結構體中的字串成員在賦值時一定要用字串拷貝函式 strcpy。
驗證程式:
#include
struct s
;int
main()
,200};
printf
("%d\n"
,s1.b[-1
]);//結果是a的值
printf
("%d\n"
,s1.b[3]
);//結果是c的值
printf
("%p\n",&
(s1.a));
printf
("%p\n",&
(s1.c));
//}
執行結果:
1000xbf9ecd0c - 0xbf9eccfc = 0x10 = 16,4個位元組剛好是 a 到 c 的距離。2000xbf9eccfc
0xbf9ecd0c
結構體初始化的幾種方式
結構體初始化方式有3種 結構體定義如下 1 struct obj type 2 第1種,位置對應賦值 位置對應必須按序列出 1 struct obj type obj 2 按序未列出的即無關引數,但預設引數必須是排在最後 struct obj type obj 第2種,點號訪問賦值 點號訪問可以指哪...
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...
結構體初始化
結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...