基本定義:結構體指的是一種資料結構,是聚合資料型別的一類,通俗講就像是打包封裝,把一些變數有共同特徵(比如同屬於某一類事物的屬性)的變數封裝在
內部,通過一定
方法訪問修改內部變數。
一、結構體的定義:
1.簡單的結構體定義
struct student;
2.附加變數初始化的結構體定義(為結構體定義乙個別名)
struct studentstu;
這就跟下面這個是等效的:
struct student;
struct student stu;
3.如果結構體只需要定義乙個變數stu,不需要再去定義第二個變數,那麼可以簡寫:
struct stu;
注意:結構體內部的成員可以是任意型別的,但是不能巢狀自己!!比如說:
struct student;
二、結構體變數及其內部成員變數的定義及訪問:
1.結構體的宣告:
struct student student;
2.結構體的成員變數的定義可以隨宣告進行:
struct student student = ;
3.結構體之間可以互相賦值:
struct student stu = student;
4.單獨為結構體的成員變數賦值:
stu.name[0]='z';
stu.name[1]='h';
.....
stu.age=15;
stu.number=001;
三、訪問元素:
結構體中訪問成員是通過變數名.成員名,如下所示
// 定義結構體型別
struct student;
// 定義結構體型別
struct student stu = ;
// 獲取stu這個變數的age值
int num2 = stu.age;
四、結構體指標:
1.結構體指標,定義結構體指標跟定義結構體變數一樣,首先必須定義結構體型別,如下所示:
// 定義結構體型別
struct student;
// 定義結構體變數
struct student stu = ;
// 定義結構體指標
struct student *p = &stu;
2.同樣的定義了結構體指標,訪問結構體變數的成員又多了幾種方法,如下所示:
/ 定義結構體型別
struct student;
// 定義結構體變數
struct student stu = ;
// 定義結構體指標
struct student *p = &stu;
// 訪問結構體變數的成員可以用stu.age,p->age,(*p).age
printf("%d==%d==%d\n", stu.age, p->age, (*p).age);
五、占用記憶體空間:
struct結構體,在結構體定義的時候不能申請記憶體空間,不過如果是結構體變數,宣告的時候就可以分配。
結構體的大小是結構體所含變數大小的總和,並且不能用"char a"這種彈性(flexible)變數,必須明確大小,下面列印輸出上述結構體的size:
printf("size of struct stu:%d\n",sizeof(struct stu));
printf("size:%d\n",sizeof(student));
結果都是28:分別是char陣列20,int變數4*2.
和c++的類不一樣,結構體不可以給結構體內部變數初始化,。
如下,為錯誤示範:
#include//直接帶變數名student
struct studentstudent;
ps:結構體的宣告也要注意位置的,作用域不一樣。 C語言結構體struct
定義 定義結構體,要定義兩次,1定義型別,2定義變數 1定義時 不分配記憶體,和 define一樣 定義結構體的樣式,叫什麼名字,成員,句式 2再定義 分配記憶體 用著個樣式定義變數 與typedef有點像 3如果定義的是 p指標,只表示出此結構體 變數的起始位址 struct a struct a...
C語言結構體(Struct)
在c 語言中,可以使用結構體 struct 來存放一組不同型別的資料。結構體的定義形式為 struct 結構體名 結構體是一種集合,它裡面包含了多個變數或陣列,它們的型別可以相同,也可以不同,每個這樣的變數或陣列都稱為結構體的成員 member 請看下面的乙個例子 struct stu stu 為結...
C語言 結構體struct 結構體對齊
1 定義乙個結構體 順便例項結構體變數 struct tag 結構體型別名 struct tag 這兩者共同構成了結構體型別 單獨的tag 結構體型別名 不能稱之為結構體型別 結構體變數名 2 定義的同時使用typedef 相當於定義結構體 為結構體起新名字 typedef struct tag 結...