C語言學習筆記 結構體

2021-10-02 05:34:23 字數 3014 閱讀 9224

結構體是一種資料型別,用 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 的一類。我們在程式裡會建立很多變數,有時候我們需要用某個變數來描述乙個人,而乙個人身上的特點有很多,不止乙個,如果只用乙個特點來描述就顯得不那麼準確。所以我們要建立多個不同的變數來描...