#include int main(void)
; struct c
;struct a
p,*pp;
printf("sizeof(): int: %lu, a: %lu, b: %lu c: %lu\n", sizeof(int), sizeof(struct a), sizeof(struct b), sizeof(struct c));
int d = 2;
printf("d: %p\n", &d);
struct b b = ;
struct b *b_1 = &b;
pp = (struct a*)(b_1); // 給大結構體裡的小結構體賦值
printf("pp的數值, %d,%c,%d\n", (pp->b).a, (pp->b).b, *((pp->b).c)); // 完全正確,賦值
printf("列印位址, %p,%p,%p\n", &((pp->b).a), ((pp->b).c), &((pp->b).b));
struct c *c_1 = null;
c_1 = (pp->c);
printf("c_1: %p\n", c_1);
if (pp && c_1)
return 0;
}
輸出為(64bit機器,8位元組對齊,gcc):
sizeof(): int: 4, a: 32, b: 24 c: 24
d: 0x7fff217995b4
pp的數值, 3,a,2
列印位址, 0x7fff217995d0,0x7fff217995b4,0x7fff217995e0
c_1: (nil)(**被補了0,導致接下來指標為null**)
sizeof(): int: 4, a: 32, b: 24 c: 24
只更改下面部分
struct b ;..
struct b b = ;
輸出
sizeof(): int: 4, a: 24, b: 16 c: 24
d: 0x7ffd866a7b44
pp的數值, 3,a,2
列印位址, 0x7ffd866a7b60,0x7ffd866a7b44,0x7ffd866a7b64
c_1: 0x7ffd866a7c60
a:1 b: c:0x7ffd866a8fda
C語言實現繼承與多型
在前面部落格已經詳細講過c 中繼承與多型的概念,在這裡則只使用c語言的語法來實現繼承與多型。繼承 即派生類中擁有基類的成員變數和成員函式,所以c語言實現如下 include typedef void func void void funb typedef struct b b typedef str...
C語言實現繼承和多型
一 面向過程程式設計與物件導向程式設計的區別 眾所周知,c語言是一種典型的面向過程程式語言,而c 確實在它的基礎上改進的一款物件導向程式設計語言,那麼,面向過程與物件導向到底有什麼樣的區別呢?從設計方法角度看 面向過程程式設計方法採用函式 或過程 來描述對資料的操作,但又將函式與其操作的資料分離開來...
C語言實現單繼承 inheritance
namedpoint.h ifndef namedpoint h define namedpoint h struct namedpoint typedef struct namedpoint namedpoint namedpoint makenamedpoint double x,double ...