結構體大小,初始化,指標和列印和對齊

2021-10-07 14:52:00 字數 1498 閱讀 7853

#include//把沒有命名的結構體稱為亞元結構

struct student//student為結構體名稱

s1; //s1在這裡是變數

struct student s2; //s2與s1等價,結構體變數

typedef struct student stud; //stud是型別,等價於在定義結構體時在其前直接加typedef-->typedef struct student

//typedef把一切合法的變數定義變為型別宣告,

typedef struct student *pstd;//型別

int main()

; int n=sizeof(ar)/sizeof(ar[0]);//n=3

//結構體輸出方式

p = ar;//陣列名稱代表陣列首元素位址

for(int i=0;is_name,(p+i)->age);

//或者p[i].s_name,(*(p+i)).s_name; }

#include//結構體大小

/*①結構體變數的首位址,必須是結構體變數中的「最大基本資料型別成員所佔位元組數」的整數倍。

②結構體變數中的每個成員相對於結構體首位址的偏移量,都是該成員基本資料型別所佔位元組數的整數倍。

③結構體變數的總大小為結構體變數中「最大基本資料型別成員所佔位元組數」的整數倍。

*///對齊:cpu讀取記憶體時是以2,4,8的倍數的位元組塊來讀寫記憶體的。

//#pragma pack(n)可以改變預設對齊數,n取值是1,2,4,8,16

//限制比n小的位元組數,不限制大的。

struct node1

;struct node2

;struct node3

;#pragma pack(1)//限制比n

struct node4

;//位元組數變為7

#pragma pack //結束

對結構體初始化

對結構體 struct a 有幾種初始化方式 struct a a1 或者struct a a1 或者struct a a1 核心喜歡用第一種,使用第一種和第二種時,成員初始化順序可變。轉一篇文章 在閱讀gnu linux核心 時,我們會遇到一種特殊的結構初始化方式。該方式是某些c教材 如譚二版 k...

fill和memset對結構體進行初始化和覆蓋

fill的標頭檔案 include memset的標頭檔案 include或 include memset可以初始化整個結構體,或者結構體中的某個陣列,但只能初始化為0或 1 fill只能初始化結構體中的某個陣列,不能初始化整個結構體,但可以任意賦值 在結構體定義的同時初始化 在主函式中的覆蓋,同理...

結構體初始化 指定初始化

參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...