?一、結構體
1.結構體struct
struct關鍵字,允許自定義復合數據類型,將不同類型的值組合在一起,這種類型稱為結構體類型。
2.使用步驟
第一步:創建或聲明結構體
第二步:定義結構體變量
第三步:調用并操作結構體變量成員
1.1定義結構體(在main的外部來定義) ? 以人為例:姓名 年齡 性別 家庭住址 電話
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//定義方法1:? ?(推薦)
struct Person {
?? ?char name[20];
?? ?int age;
?? ?char gender[10];
?? ?char address[50];
?? ?char tel[12];//長度要比實際多
};
//定義方法2:(推薦)??
typedef struct Person1 {
?? ?char name[20];
?? ?int age;
?? ?char gender[10];
?? ?char address[50];
?? ?char tel[12];//要比實際多
}Person1;//定義方法3:? PERSON2對結構體類型struct Person2重命名
typedef struct Person2 {
?? ?char name[20];
?? ?int age;
?? ?char gender[10];
?? ?char address[50];
?? ?char tel[12];//要比實際多
}PERSON2;//定義方法4:
int main() {
1.2定義結構體變量 ? ? ??
// 方法一? ? 直接賦值初始化
?? ?struct Person p1 = { "佳佳",18,"女","高新區","12345678910" };
//方法二? ? ?先聲明再賦值
?? ?struct Person p2;
1.3調用結構體成員(賦值)? ?
?/*p1.name = "喵喵";*/? ? ?//不能重新賦值,字符數組名是常量 ?
? ? strcpy(p2.name, "喵喵");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //strcpy? ?需引入<string.h>頭文件
?? ?p2.age = 20;
?? ?strcpy(p2.gender, "男");
?? ?strcpy(p2.address, "中原區");
?? ?strcpy(p2.tel, "10987654321");
1.4查看取出數據
????printf("%s %d %s %s %s\n", p1.name, p1.age, p1.gender, p1.address, p1.tel);
?? ?printf("%s %d %s %s %s\n", p2.name, p2.age, p2.gender, p2.address, p2.tel);//定義方法3中——查看數據
?? ?PERSON2 p3 = { "肖肖",18,"男","高新區","12345678910" };
?? ?printf("%s %d %s %s %s\n", p3.name, p3.age, p3.gender, p3.address, p3.tel);?
二、結構體成員的訪問(使用)
結構體成員的使用,分為兩種情況:
1、通過結構體變量訪問成員 ? 語法:結構體變量名.成員
2、通過結構體指針變量訪問 ? 語法:結構體指針變量->成員?
//通過結構體指針變量訪問 ? 語法:結構體指針變量->成員
?? ?strcpy(p3.name, "chhaoyang");
?? ?printf("%s %s\n", p3.name, (&p3)->name);? ? //成功打印,chhaoyang chhaoyang? ??
?? ?
?? ?struct Person p6;
?? ?printf("%s %s", p6.name, (&p6)->name);? ? //沒有賦值,打印出垃圾數據
總結:
1.在創建一個結構體變量后,需要給成員賦值。在沒有給成員賦值的情況下調用,打印的值是垃圾數據,可能導致程序異常終止。
2.不同結構體變量的成員是獨立的,互不影響,一個結構體變量的成員更改,不影響另外一個。