結構體與函式應用

2021-10-07 00:25:07 字數 1942 閱讀 4285

#includestruct xyz;

struct xyz xyz_of(int x, long y, double z)

int main(void)

; s = xyz_of(12,7654321,35.689);

printf("s.x = %d\n", s.x);

printf("s.y = %ld\n", s.y);

printf("s.z = %f\n", s.z);

return 0;

}

#include#include#includetypedef struct

struct;

void change(struct* temp)

int main()

; printf("原資料: %d, %.2f, %s",st.a,st.b,st.s);

change(&st);

printf("\n呼叫子函式後資料: %d, %.2f, %s",st.a,st.b,st.s);

return 0;}/*

執行結果:

原資料: 5, 1.20, microsoft

呼叫子函式後資料: 10, 4.40, microsoft-ok

*/

(1)使用 stddef.h 標頭檔案

#include //自帶巨集定義offsetof

#include struct address ;

//#define offsetof(type, member)

//type填寫結構體名,member填寫成員名稱,返回記憶體偏移量,型別為size_t

int main() /*

執行結果:

address 結構中的 name 偏移 = 0 位元組。

address 結構中的 street 偏移 = 50 位元組。

address 結構中的 phone 偏移 = 100 位元組。

*/

(2)巨集定義計算

#include /*

巨集定義計算偏移量

1. ( (type *)0 ) 將零轉型為type型別指標,結構體中成員的位址即為在此結構體中的偏移量。

2. ((type *)0)->member 訪問結構中的資料成員;

3. &( ( (type *)0 )->member )取出資料成員的位址,即相對於0的偏移量,要的就這個;

4.(size_t)(&(((type*)0)->member))結果轉換型別,size_t應該最終為unsigned int型別。

*/#define offsetof(type, member) ((int)(&((type *)0)->member))

struct test

;int main(void)

/*執行結果: 4位元組對齊

offset[5]偏移量: 20

a偏移量: 40

b偏移量: 52

c偏移量: 56

d偏移量: 60

e偏移量: 64

f偏移量: 68

*/

(3)結構體成員位址減去首位址

#include struct test

;int main(void)

/*執行結果: 4位元組對齊

b偏移量:52

*/

#include #include typedef struct __videovideo;

video vi=;

//使用 *(int *)((char *)&vi+偏移量) 獲取成員的值

int main(void)

結構體理解與應用

知道為什麼要結構化資訊 下面用 說明乙個簡單的 int id 4 char name 4 16 char phone 4 16 這種方法表達乙個 資訊,表示的資訊不直觀,最重要的是資料的訪問不方便,比如要按id來查詢乙個人,那麼用上面這種方式儲存資訊,來顯示查詢結果就要對下面函式的每個傳入引數都輸出...

stat函式與結構體

stat 取得檔案狀態 相關函式 fstat,lstat,chmod,chown,readlink,utime 表頭檔案 include include 定義函式 int stat const char file name,struct stat buf 函式說明 stat 用來將引數file na...

函式指標與結構體

在c 中,物件導向是通過虛函式來實現的,僅有虛函式,當然只是乙個物件導向的皮毛,因為實際上真正的物件導向概念訊息和訊息響應。先撇開目前市面上物件導向中關於封裝變化,依賴倒轉等一些概念性和理論性的東西。我們在這邊,僅考慮c 中虛函式在c中的模擬實現,以便於更好的理解虛函式。假定我們現在有乙個函式的原形...