C 基礎(04) 結構體及typedef

2021-09-25 09:02:13 字數 3122 閱讀 2510

結構體屬於使用者自定義的資料型別,其和類的定義及語法幾乎一樣。它們唯一的區別在於結構體預設的訪問控制屬性是公有型別(public),而類的預設訪問控制屬性是私有型別(private)

(1)、語法:struct   結構體名  ;

// 建立student的結構體

struct student

s3; // s3 為該結構體的乙個變數。

int main()

; cout << "name : " << s2.name << " , age : " << s2.age << " , score : " << s2.score << endl;

// 例項化方法三:在建立時就例項化s3,s3為該結構體的乙個變數。

cin.get();

}

(2)、結構體前有 typedef 時,其後的stu 為結構體型別的別名。

#include#includeusing namespace std;

// stu 為結構體student 的別名

typedef struct student

stu; // stu 為該結構體型別的別名

typedef struct student

*st; // 等價於student型別的指標: student *

int main()

(3)、結構體陣列

#include#includeusing namespace std;

// 建立student的結構體

struct student

;int main() ,

}; // 定義之後再對其進行賦值

array1[2].name = "a03";

array1[2].age = 22;

array1[2].score = 98;

// 遍歷結構體陣列

for (int i = 0; i < 3; i++)

cin.get();

}

(4)、結構體指標

#include#includeusing namespace std;

// 建立student的結構體

struct student

;int main()

; // 通過指標指向結構體變數

student *p = &s1;

// 通過指標來訪問結構體變數中的值

cout << p->name << "," << p->age << "," << p->score << endl;

cin.get();

}

(5)、結構體巢狀結構體(結構體的成員是結構體)

#include#includeusing namespace std;

// 建立student的結構體

struct student

;// 建立teacher的結構體

struct teacher

;int main()

(6)、結構體作為函式的引數

#include#includeusing namespace std;

// 建立student的結構體

struct student

;// 值傳遞的方式

void printstudent1(student s)

// 位址傳遞的方式

void printstudent2(student *p)

int main()

; printstudent1(s6);

printstudent2(&s6); //將位址賦給指標形參

cin.get();

}

(7)、結構體中的 const 使用

由於在呼叫函式的時候,如果使用的是值傳遞,它會把對應的資料都拷貝乙份。當需要處理的資料很大時,這種方式就會占用大量的記憶體,增加記憶體開銷。所以常常使用位址傳遞,使用指標來進行操作。但是使用指標來進行操作會很容易引起對原始資料的誤修改。因此使用const關鍵字來對其進行限制。使其只能讀,而不能修改。

#include#includeusing namespace std;

// 建立student的結構體

struct student

;// 用const來對指標變數進行修飾

void printstudent2(const student *p)

int main()

; printstudent2(&s6); //將位址賦給指標形參

cin.get();

}

(1)、3個老師,每個老師帶2個學生。分別將3個老師和每個老師帶的學生資訊輸出:

#include#include#includeusing namespace std;

// 建立student的結構體

struct student

;// 建立teacher結構體

struct teacher

;// 為teacher的陣列成員賦值,將陣列作為形參傳遞給函式

void allocatespace(teacher tarray,int len1)

;// 氣泡排序法

void bubblesort(therole array,int len)

} }}

// 列印結果

void printinfo(therole *role,int len)

}int main()

, ,

, ,

};int len = sizeof(role) / sizeof(role[0]);

bubblesort(role, len);

printinfo(role,len);

cin.get();

}

C語言筆記04 結構體

結構體定義 結構體裡面能定義除自己本身之外的任何資料型別,雖然不能定義自己本身,但能定義自身型別的指標變數。如 struct node 訪問結構體內元素 struct node n1,n2 普通變數訪問結構體元素方法 n1.x n1.info n1.next 指標變數訪問結構體元素方法 或 n2 x...

C基礎 結構體

c語言,結構體語法 1.定義結構體型別 struct 結構體名稱 例 struct date int year int month int day 2.結構體在記憶體中 例一 struct student char name 指標佔8個位元組 int no int佔4個位元組 int age int...

c語言基礎 結構體

結構體也是一種資料型別 這種資料型別裡面可以定義不同的資料型別的資料,是一種使用者自定義的資料型別 當然結構體裡面可以巢狀陣列和結構體 結構體的定義 struct 結構體名 注意 結構體的命名用駝峰法 每乙個成員變數後面要加上 在最後的 後面要加上 結構體變數的定義 struct 結構體名 結構體變...