C/C++学习之路_八: 复合类型
生活随笔
收集整理的這篇文章主要介紹了
C/C++学习之路_八: 复合类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C/C++學習之路_八: 復合類型
目錄
1. 結構體
1. 概述
2. 結構體變量的定義和初始化
定義結構體變量的方式:
結構體類型和結構體變量關系:
3. 結構體成員的使用
//結構體類型的定義 struct stu {char name[50];int age; };int main() {struct stu s1;//如果是普通變量,通過點運算符操作結構體成員strcpy(s1.name, "abc");s1.age = 18;printf("s1.name = %s, s1.age = %d\n", s1.name, s1.age);//如果是指針變量,通過->操作結構體成員strcpy((&s1)->name, "test");(&s1)->age = 22;printf("(&s1)->name = %s, (&s1)->age = %d\n", (&s1)->name, (&s1)->age);return 0; }4. 結構體數組
//統計學生成績 struct stu {int num;char name[20];char sex;float score; };int main() {//定義一個含有5個元素的結構體數組并將其初始化struct stu boy[5] = {{101, "Li ping", 'M', 45},{102, "Zhang ping", 'M', 62.5},{103, "He fang", 'F', 92.5},{104, "Cheng ling", 'F', 87},{105, "Wang ming", 'M', 58}};int i = 0;int c = 0;float ave, s = 0;for (i = 0; i < 5; i++) {s += boy[i].score; //計算總分if (boy[i].score < 60) {c += 1; //統計不及格人的分數}}printf("s=%f\n", s);//打印總分數ave = s / 5; //計算平均分數printf("average=%f\ncount=%d\n\n", ave, c); //打印平均分與不及格人數for (i = 0; i < 5; i++) {printf(" name=%s, score=%f\n", boy[i].name, boy[i].score);// printf(" name=%s, score=%f\n", (boy+i)->name, (boy+i)->score);}return 0; }5. 結構體套結構體
struct person {char name[20];char sex; };struct stu {int id;struct person info; };int main() {struct stu s[2] = {1, "lisi", 'F', 2, "wangwu", 'M'};for (int i = 0; i < 2; i++) {printf("id = %d\tinfo.name=%s\tinfo.sex=%c\n", s[i].id, s[i].info.name, s[i].info.sex);}return 0; }6. 結構體賦值
//結構體類型的定義 struct stu {char name[50];int age; };int main() {struct stu s1;//如果是普通變量,通過點運算符操作結構體成員strcpy(s1.name, "abc");s1.age = 18;printf("s1.name = %s, s1.age = %d\n", s1.name, s1.age);//相同類型的兩個結構體變量,可以相互賦值//把s1成員變量的值拷貝給s2成員變量的內存//s1和s2只是成員變量的值一樣而已,它們還是沒有關系的兩個變量struct stu s2 = s1;//memcpy(&s2, &s1, sizeof(s1));printf("s2.name = %s, s2.age = %d\n", s2.name, s2.age);return 0; }7. 結構體指針
1. 指向普通結構體變量的指針
//結構體類型的定義 struct stu {char name[50];int age; };int main() {struct stu s1 = {"lily", 18};//如果是指針變量,通過->操作結構體成員struct stu *p = &s1;printf("p->name = %s, p->age=%d\n", p->name, p->age);printf("(*p).name = %s, (*p).age=%d\n", (*p).name, (*p).age);return 0; }2. 堆區結構體變量
//結構體類型的定義 struct stu {char name[50];int age; };int main() {struct stu *p = NULL;p = (struct stu *) malloc(sizeof(struct stu));//如果是指針變量,通過->操作結構體成員strcpy(p->name, "test");p->age = 20;printf("p->name = %s, p->age=%d\n", p->name, p->age);printf("(*p).name = %s, (*p).age=%d\n", (*p).name, (*p).age);free(p);p = NULL;return 0; }3. 結構體套一級指針
//結構體類型的定義 struct stu {char *name;int age; };int main() {struct stu *p = NULL;p = (struct stu *) malloc(sizeof(struct stu));p->name = malloc(strlen("test" + 1));strcpy(p->name, "test");p->age = 20;printf("p->name = %s, p->age=%d\n", p->name, p->age);printf("(*p).name = %s, (*p).age=%d\n", (*p).name, (*p).age);if (p->name != NULL) {free(p->name);p->name = NULL;}if (p != NULL) {free(p);p = NULL;}return 0; }8. 結構體做函數參數
1. 結構體普通變量做函數參數
//結構體類型的定義 struct stu {char name[50];int age; };void set_stu(struct stu tmp) {strcpy(tmp.name, "mike");tmp.age = 10;printf("tmp.name = %s, tmp.age = %d\n", tmp.name, tmp.age); }int main() {struct stu s = {0};set_stu(s);printf("s.name = %s, s.age = %d\n", s.name, s.age);return 0; }輸出: tmp.name = inke, tmp.age = 10 s.name = , s.age = 02. 函數參數為結構體指針變量
void set_stu_pro(struct stu *tmp) {strcpy(tmp->name, "mike");tmp->age = 19; }int main() {struct stu s = {0};set_stu_pro(&s);printf("s.name = %s, s.age = %d\n", s.name, s.age);return 0; }輸出: s.name = mike, s.age = 193. 結構體數組名做函數參數
void set_stu_pro(struct stu *tmp, int n) {for (int i = 0; i < n; i++) {sprintf(tmp->name, "name%d%d%d", i, i, i);tmp->age = 20 + i;tmp++;} }int main() {struct stu s[3] = {0};int n = sizeof(s) / sizeof(s[0]);set_stu_pro(&s, n);for (int i = 0; i < n; i++) {printf("%s, %d\n", s[i].name, s[i].age);}return 0; }輸出: name000, 20 name111, 21 name222, 224. const修飾結構體指針形參變量
void fun1(struct stu *const p) {//p = NULL; //errp->age = 10; //ok }//void fun2(struct stu const* p) void fun2(const struct stu *p) {p = NULL; //ok//p->age = 10; //err }void fun3(const struct stu *const p) {//p = NULL; //err//p->age = 10; //err }2. 共用體(聯合體)
3. 枚舉
4. typedef
總結
以上是生活随笔為你收集整理的C/C++学习之路_八: 复合类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++学习之路_七: 内存管理
- 下一篇: C/C++学习之路_九:文件操作