c语言怎么判定结构体有无数据,C语言中什么是结构体,怎么定义结构体。
為什么要用結構體?
沒有結構體之前,C語言中,數據的組織依靠:變量+數組。最初最簡單的時候,只需要使用基本數據類型來定義單個變量,需要幾個就定義幾個,后來有時候需要很多意義相關的變量這時候數組出現了。數組解決了需要很多類型相同,意義相關的變量問題,但是數組是有限制的,數組的不足在于,一個數組只能存儲很多個數據類型相同的變量。所以碰到需要封裝幾個類型不同變量的時候,數組就無能為力。這時候就需要結構體。
注意:結構體定義在主函數外面
結構體定義的是一種新的組合類型(例如int double),而不是變量 ,也不消耗內存,可以看成一張造房子用的圖紙
在定義變量的地方,用結構體類型定義變量,
#includestruct Student
{
char name[20]; //學生姓名
unsigned int num; //學號
int isMale; //性別
}; //注意這里的;不能丟
int main()
{
struct Student S1; //struct Student類型,變量名S1
//給結構體變量賦值
S1.name[0] = 'J';
S1.num = 123;
S1.isMale = i;
printf("S1.num = %d",S1.num);
return 0;
}
什么是結構體?
結構體是一個集合,里面包含許多元素,這些元素的數據類型可以相同,也可以不同。結構體是一種數據封裝的方法,
結構體存在的意義就在于,把很多數據類型不相同的變量封裝在一起,組成一個打的新的數據類型
數據結構:把龐大復雜的數據用一定的方式組織管理起來,便于操作(查找,增加,刪除等)這就是數據結構。
結構體和數組的關聯:數組是一種特殊的結構體,特殊之處在于封裝內的各個元素類型是相同。結構體和數組一般都操作的是其中的子元素,一般不會做整體操作。
使用結構體的步奏:
1 定義結構體的類型。結構體類型的定義是在函數外面(函數外面 == 全局)的
2 定義結構體變量,使用第一步定義的類型來定義結構體變量
3 使用變量,實際上使用結構體變量的時候,使用的是結構體變量中封裝的各個子元素,而不是結構體變量本身。
結構體初始化
結構體變量如果定義的時候無初始化,則結構體變量中的子元素的值是隨機的,初始化時分號不好用
正確的初始化方式:
struct Mystruct s =
{
.a = 2, //一定是用逗號隔開不是分號
.b = 3, //一定是用逗號隔開不是分號
.c = 4, //一定是用逗號隔開不是分號
};
注意事項
1結構體類型的成員可以是另外一個結構體類型的成員
{
花括號里面的變量作用域名
}
2結構體類型某個成員是一個指向結構體類型的指針的話這個結構體類型只能是自己不是其他的(這是死規定)。
3只有聲明變量時才會分配空間,創建類型相當于構建圖紙并不是分配空間。
4如果有整型變量,那么struct 中的其他類型變量必須是4個字節:叫字對齊
5? 內存空洞,浪費了其他字節時,改變方法:把相同類型的 變量放在一起,余下的空間不夠在分配
6? 半子對齊:結構體中只有 short int 按2個字節對齊, 有整型和短整型按整型對齊;
使用結構體存在的問題: 內存空洞? 字對齊半字對齊
struct node struct node struct node
{char ch; { {
int num; int num; char ch;
}; //變量占8個字節 char ch1; int num;
char ch2; char ch1;
}; //變量占12個字節 char ch2;
}; //變量占12個字節
struct node
{char ch;
char ch1;
char ch2
}; 變量占3個字節
//int型變量占四個字節 字對齊
后一個變量若能在前一個變量分配的空間中存放下,則后一個變量不再重新分配空間。
此部分待續......
總結
以上是生活随笔為你收集整理的c语言怎么判定结构体有无数据,C语言中什么是结构体,怎么定义结构体。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言在main中输入2个整数ab,20
- 下一篇: 伟业板材与漳小木板材,那个比较好?