結構體是一種資料型別,用 struct 關鍵字來修飾,定義乙個結構體可以這樣:
123
45
struct teacher
如果用 typedef 修飾,就可以直接使用 teacher
123
4567
typedef struct teacher
teacher teacher = null;
為結構體申明變數有多種方式:
123
4567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
// 初始化結構體變數1: 定義型別的同時定義變數
struct teacher
t1, t2;
// 初始化結構體變數2
struct student
s1 = ;
// 初始化結構體變數3
struct
dog = ;
// 初始化結構體變數4
struct teacher t3 = ;
// 初始化結構體變數5
struct teacher t4;
struct teacher *pteacher = null;
pteacher = &t4;
strcpy(pteacher->name, "john");
pteacher->age = 30;
結構體賦值之前要先給結構體申請記憶體。
123
4567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
48
/* 結構體賦值 */
#include #include struct teacher
;typedef struct teacher teacher_t;
void show_teacher(teacher_t t);
void copyteacher(teacher_t *to, teacher_t *from);
int main()
void copyteacher(teacher_t *to, teacher_t *from)
void show_teacher(teacher_t t)
指標陣列可以分成靜態結構體陣列和動態結構體陣列兩種。
123
4567
891011
1213
1415
1617
18
// 靜態結構體陣列
teacher t1[3] = ;
for(int i = 0; i < 3; i++)
// 動態結構體陣列
teacher *p = null;
p = (teacher *)malloc(3 * sizeof(teacher));
char buf[50];
for(int i = 0; i < 3; i++)
結構體陣列
我們在定義結構體的時候,其中有乙個屬性使用了一級指標:
123
45
struct teacher
;
如上所示char *name
是乙個指標型別的變數,指標型別的變數當我們為其賦值時要分配記憶體空間,釋放結構體的時候也要先釋放其中指標記憶體的變數。
示例**,結構體巢狀一級指標
示例**,結構體巢狀二級指標
當結構體中巢狀了指標,採用淺拷貝的方式如下
123
4567
8
student stu;
stu.name = (char *)malloc(30);
strcpy(stu.name, "aaaaaa");
// 淺拷貝,stu 和 sut2 的name 指標指向同一塊記憶體
student stu2;
stu2 = stu;
printf("name = %s\n", stu2.name);
此時 stu.name 和 stu2.name 指向同一塊記憶體空間,當釋放其中乙個指標的時候,另乙個 name 的值也就消失了。
深拷貝的方式指的就是 stu2.name 指向一塊新的記憶體空間,這塊記憶體空間拷貝 stu.name 指向的空間的內容,就像下面這樣。
123
45
// 深拷貝,stu3 重新申請一塊記憶體
student stu3;
stu3.name = (char *)malloc(30);
strcpy(stu3.name, stu.name);
printf("name = %s\n", stu3.name);
示例**,結構體的深拷貝和淺拷貝
C語言學習筆記 結構體
1 結構體定義 結構體是將不同型別的資料按照一定的功能需求進行整體封裝,封裝的資料型別與大小均可以由使用者指定。2 結構體宣告 宣告乙個結構體型別的一般形式為 struct 結構體名 例如 struct book 注意 結構體名 的命名規範是全部使用大寫字母。3 定義結構體變數 定義結構體型別變數有...
C語言學習筆記 結構體
struct stu 順帶宣告 在結構體宣告的最後的分號前加stu1,stu2這樣的變數名,不需要寫結構體的名字。利用結構體名來宣告變數 struct stu stu3 struct stu stu1,stu2,stu3 這樣的語句中struct stu就可以理解成變數宣告前的int,double等...
C語言學習筆記 結構體
在c語言中,結構體 struct 指的是一種資料結構,是c語言中聚合資料型別 aggregate data type 的一類。我們在程式裡會建立很多變數,有時候我們需要用某個變數來描述乙個人,而乙個人身上的特點有很多,不止乙個,如果只用乙個特點來描述就顯得不那麼準確。所以我們要建立多個不同的變數來描...