c語言學習筆記十三

2022-08-18 05:06:08 字數 1208 閱讀 6188

結構體 

示例**

#include

int main(void)s;

s.a=1;

s.b=2;

s.c=3;

s.d=4;

printf("%u\n",sizeof(s));

return 0;

}編譯:gcc test.c -o

反彙編:objdump test

四個成員變數在棧上的排列

80483ed:c6 44 24 14 01       movb   $0x1,0x14(%esp)

80483f2:66 c7 44 24 16 02 00 movw   $0x2,0x16(%esp)

80483f9:c7 44 24 18 03 00 00 movl   $0x3,0x18(%esp)

8048400:00 

8048401:c6 44 24 1c 04       movb   $0x4,0x1c(%esp)

合理安排成員順序,可以避免產生填充位元組:

示例**:

方式一:

structs;

方式二(效率有問題不建議使用)

struct__attribute__((packed))s;

聯合體示例**如下:

#include

typedef unionbitfield;

unsigned char byte[8];

}demo_type;

int main(void)};

printf("sizeof demo_type=%u\n",sizeof(demo_type));

printf("values: u=%u,%u,%u,%u,%u,%

u\n",u.bitfield.one,u.bitfield.two,u.bitfield.three,u.bitfield.four,u.bitfi

eld.five,u.bitfield.six);

printf("hex dump of u: %x %x %x %x %x %x\n",u.byte[0],u.byte

[1],u.byte[2],u.byte[3],u.byte[4],u.byte[5],u.byte[6],u.byte[7]);

return 0;

}c內聯彙編

示例**:(將a的值賦值給b )

#include

int main() 

c語言學習筆記十三

結構體 示例 include int main void s s.a 1 s.b 2 s.c 3 s.d 4 printf u n sizeof s return 0 編譯 gcc test.c o 反彙編 objdump test 四個成員變數在棧上的排列 80483ed c6 44 24 14 ...

c語言學習筆記二十三

指標 佔4個位元組的儲存空間 概念把乙個變數所在的記憶體單元儲存在另乙個記憶體單元中,儲存單元的這個位址就是指標 示例 int i int pi i 指標的重新賦值 pi j 改變指標所指向的整型變數的值 pi pi 10 指標初始化另乙個指標 兩指標必須為同一型別 int ptri ptri pi...

C語言學習筆記 十三 鍊錶 Chain

動態申請鍊錶 動態申請鍊錶 陣列 靜態儲存,有序的資料集合,資料順序能夠對映實體地址,查詢快,插入刪除效率低 鍊錶 動態儲存,插入刪除效率高 include include typedef struct node node node createlink void printlink node he...