注意:以下都是32位的系統
一、結構體定義
第乙個問題:下面兩個
struct human;
struct human;
這兩個結構體是否相同?
答案: 不一樣
原因: 根據c語言結構體的機制,我們為結構體變數分配乙個連續空間時,總是以結構體中最大位元組長度型別的整數倍分配。
第乙個的記憶體分布圖:
*** length name[3]
四個位元組 四個位元組 四個位元組
總佔據 12個位元組
第二個的記憶體分布圖
name[3] *** length
3個位元組 1個位元組 4個位元組
總佔據 8個位元組
**驗證:
1 #include 23
struct student ;11
intmain()
12執行結果:
book@www.
100ask.org:
~/ablerry$ vi 1.c
book@www.
100ask.org:
~/ablerry$ gcc -o 8
1.c1.c: in function 『main』:
1.c:13:
9: warning: format 『%d』 expects argument of type 『int』, but argument 2 has type 『long
unsigned
int』 [
-wformat=
]printf
("%d\n"
,sizeof
(struct student));
^book@www.
100ask.org:
~/ablerry$ ./8
12
1 #include 23
struct student ;9
intmain()
101.c: in function 『main』:
1.c:13:
9: warning: format 『%d』 expects argument of type 『int』, but argument 2 has type 『long
unsigned
int』 [
-wformat=
]printf
("%d\n"
,sizeof
(struct student));
^book@www.
100ask.org:
~/ablerry$ ./7
bash:./
7: no such file or directory
book@www.
100ask.org:
~/ablerry$ ./8
8
第二種情況 其中帶結構體自身的指標 記憶體大小該如何算
1 #include 23
typedef
struct student student;
1011
struct num ;17
intmain()
18執行結果:
book@www.
100ask.org:
~/ablerry$ gcc -o 8
1.c1.c: in function 『main』:
1.c:19:
9: warning: format 『%d』 expects argument of type 『int』, but argument 2 has type 『long
unsigned
int』 [
-wformat=
]printf
("student size: %d\n"
,sizeof
(student));
^1.c:20:
9: warning: format 『%d』 expects argument of type 『int』, but argument 2 has type 『long
unsigned
int』 [
-wformat=
]printf
("num size: %d\n"
,sizeof
(struct num));
^book@www.
100ask.org:
~/ablerry$ ./8
student size:
8num size:
16
第三種情況結構體中帶指標函式 記憶體該如何計算
1 #include 23
typedef
struct student student;
1011
struct num ;18
intmain()
19執行結果:
book@www.
100ask.org:
~/ablerry$ gcc -o 8
1.c1.c: in function 『main』:
1.c:20:
9: warning: format 『%d』 expects argument of type 『int』, but argument 2 has type 『long
unsigned
int』 [
-wformat=
]printf
("student size: %d\n"
,sizeof
(student));
^1.c:21:
9: warning: format 『%d』 expects argument of type 『int』, but argument 2 has type 『long
unsigned
int』 [
-wformat=
]printf
("num size: %d\n"
,sizeof
(struct num));
^book@www.
100ask.org:
~/ablerry$ ./8
student size:
8num size:
24
綜合三種情況基本結論如下:
1.根據c語言結構體的機制,我們為結構體變數分配乙個連續空間時,總是以結構體中最大位元組長度型別的整數倍分配。
2.在考慮到第一點的情況下,結構體的大小總是取決於結構體裡面的資料型別大小
二、結構體的訪問方式
第一種 普通的結構體型別
typdef struct num num;
num *p;
請問如何訪問結構體指標p中 a 和 b 兩個成員
指標直接訪問:
p->a;
p->b;
指標間接訪問: //為什麼稱之為間接訪問 * 是間接訪問符
(*p).a
(*p).b
**驗證如下:
1 #include 23
typedef
struct num num;
78 num *p;
9 num data1 =;10
intmain()
11執行結果如下:
book@www.
100ask.org:
~/ablerry$ gcc -o c_struct 2.c
book@www.
100ask.org:
~/ablerry$ .
/c_struct
p->a:
65p->b:23(
*p).a:65(
*p).b:
23
第二種 帶指標的結構體
typedef struct num num;
num *p;
舉例如下:
1 #include 23
typedef
struct num num;
89 num *p1;
1011 num data1 =;12
intmain()
13~
這個訪問結構體成員體變數的 方法就是l兩種方式 p1->a (*p1).a 結構體型別 結構體變數 結構體陣列 結構體指標
問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...
結構體指標與結構體中變數的指標
結構體指標與結構體變數指標的區別,在進行實現的工程專案中會有許多地方用到結構體指標的情況,在使用這前都需要先malloc一塊空間之後才能有空間進入儲存資料,例項 如下 include includetypedef struct student student t,pstudent t void pr...
結構體變數和指向結構體變數的指標
目錄概念 記憶體分配 物件的引用 結構體變數和結構體指標變數作形參的區別 以結構體變數和結構體指標變數形參的函式呼叫 結構體變數是指將不同的資料型別整合成乙個有機的整體,以便於呼叫。struct student student stud1 stud1就是結構體變數結構體指標變數是指指向結構體變數的指...