#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中的模擬實現,以便於更好的理解虛函式。假定我們現在有乙個函式的原形...