结构体小结2
結構體與指針和鏈表
結構體的聲明
結構體是一種類型,其中包含數個不同的類型變量
struct student
{
char name[20];
int age;
int number;
}
struct student x;
struct student x[20],*x;
此時的x與x[20],*x均為同一種類型
注意:
? ?struct
{
int a;
char b;
float c;
}x;
struct
{
int a;
char b;
float c;
}y[20],*z;
現在的x,y,*z,是完全不同的類型。
也可以使用typedef關鍵字聲明一種新的數據類型
typefde struct student
{
char name[20];
int age;
int number;
}STU;
以后想要聲明這種結構使用STU 就可以了,當然也可以是用STU 來聲明指針
STU one;
STU *p;
p=&one;
這都是合法的使用方式。就可以通過p->name來訪問名字了。
結構體的自引用行為
struct student
{
int a;
struct student *b;
int c;
}
這樣引用是合法的只不過指針指向的是同一類型的不同的結構,會在鏈表及數據結構中提到。
結構的初始化類似于數組的初始化,在聲明是使用大括號可以初始化
在使用指針時引上例,*p+1;*(p+1);p+1都是非法的,如果one 是一個數組那就另說,
? ? ?->的優先級高于&的優先級
結構體有點類似于指針是一層一層的結構
在聲明一個結構體的各個內容時,最好讓對邊界要求最嚴格的成員首先出現,對邊界要求最弱的成員最后出現,這種方法可以自大限度地減少因邊界對其而帶來的空間損失。
例如
? ? struct ALU
{
int a;
char b;
char c;
};
當然為了程序的可維護性,也可以不用這樣做,但是建議這樣做
可以使用offsetof(type,member)來確定這個指定成員開始次存儲的位值距離結構開始存儲的位值偏移幾個字節
在調用結構體時最好用指針形式調用這樣效率會高很多,如果可以把它申請成寄存器變量將會更加的快捷方便。
使用const關鍵字防止結構體內容被修改
結構體的聲明
結構體是一種類型,其中包含數個不同的類型變量
struct student
{
char name[20];
int age;
int number;
}
struct student x;
struct student x[20],*x;
此時的x與x[20],*x均為同一種類型
注意:
? ?struct
{
int a;
char b;
float c;
}x;
struct
{
int a;
char b;
float c;
}y[20],*z;
現在的x,y,*z,是完全不同的類型。
也可以使用typedef關鍵字聲明一種新的數據類型
typefde struct student
{
char name[20];
int age;
int number;
}STU;
以后想要聲明這種結構使用STU 就可以了,當然也可以是用STU 來聲明指針
STU one;
STU *p;
p=&one;
這都是合法的使用方式。就可以通過p->name來訪問名字了。
結構體的自引用行為
struct student
{
int a;
struct student *b;
int c;
}
這樣引用是合法的只不過指針指向的是同一類型的不同的結構,會在鏈表及數據結構中提到。
結構的初始化類似于數組的初始化,在聲明是使用大括號可以初始化
在使用指針時引上例,*p+1;*(p+1);p+1都是非法的,如果one 是一個數組那就另說,
? ? ?->的優先級高于&的優先級
結構體有點類似于指針是一層一層的結構
在聲明一個結構體的各個內容時,最好讓對邊界要求最嚴格的成員首先出現,對邊界要求最弱的成員最后出現,這種方法可以自大限度地減少因邊界對其而帶來的空間損失。
例如
? ? struct ALU
{
int a;
char b;
char c;
};
當然為了程序的可維護性,也可以不用這樣做,但是建議這樣做
可以使用offsetof(type,member)來確定這個指定成員開始次存儲的位值距離結構開始存儲的位值偏移幾個字節
在調用結構體時最好用指針形式調用這樣效率會高很多,如果可以把它申請成寄存器變量將會更加的快捷方便。
使用const關鍵字防止結構體內容被修改
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
轉載于:https://www.cnblogs.com/zmrlinux/p/4921437.html
總結
- 上一篇: 40万按揭15年月供多少
- 下一篇: td9指标什么意思