天天看點

C++結構體

結構體

結構體基本概念

結構體屬于使用者自定義的資料類型,允許使用者存儲不同的資料類型

結構體定義和使用

文法 :struct 結構體名 { 結構體成員清單} ;

通過結構體建立變量的方式有三種:

  • struct 結構體名 變量名
  • struct 結構體名 變量名 = {成員1值,成員2值…}
  • 定義結構體時順便建立變量
//結構體定義
struct student{
    //成員清單
    string name; //姓名
    int age;	 //年齡
    int score;	 //分數
}stu3;//結構體變量建立方式3

int main(){
	//結構體變量建立方式1
	struct student stu1; //struct 關鍵字可以省略
	stu1.name = "張三";
	stu1.age = 18;
	stu1.score = 100;
	cout << "姓名:" << stu1.name << "年齡:" << stu1.age << "分數:" << stu1.score << endl;

	//結構體變量建立方式2
	struct student stu2 = { "李四" ,19 ,60 };
	cout << "姓名:" << stu2.name << "年齡:" << stu2.age << "分數:" << stu2.score << endl;

	//結構體變量建立方式3
	stu3.name = "王五";
	stu3.age = 18;
	stu3.score = 80;
	cout << "姓名:" << stu3.name << "年齡:" << stu3.age << "分數:" << stu3.score << endl;

	system("pause");
	return 0;
}
           

總結1:定義結構體時的關鍵字是struct,不可省略

總結2:建立結構體變量時,關鍵字struct可以省略

總結3:結構體變量利用操作符“.” 通路成員

結構體數組

作用:将自定義的結構體放入到數組中友善維護

文法:struct 結構體名 數組名[元素個數] = { {} ,{} ,… ,{} }

//結構體定義
struct student{
    //成員清單
    string name; //姓名
    int age;	 //年齡
    int score;   //分數
}

int main(){
    //建立結構體數組
    struct student arr[3]={
        {"張三",18,80},
        {"李四",19,60},
        {"王五",20,99}
    };
    
    //給結構體數組中的元素指派
    arr[2].name = "趙六";
    arr[2].age = 80;
    arr[2].age = 60;
    
    //周遊結構體數組
    for(int i; i < 3 ; i++){
        cout << "姓名:" << arr[i].name 
             << "年齡:" << arr[i].age
             << "分數:" << arr[i].score << endl;
    }
    
    system("pause");
	return 0;
}
           

結構體指針

作用:通過指針通路結構體中的成員

  • 利用操作符 “->” 可以通過結構體指針通路結構體屬性
//結構體定義
struct student{
    //成員清單
    string name; //姓名
    int age;	 //年齡
    int score;   //分數
};

int main(){
    //建立結構體變量
    struct student stu = {"張三",18,100};
    //通過指針指向結構體變量
    struct student * p = &s;
    //通過指針通路結構體變量中的資料
    cout << "姓名:" << p->name << "年齡:" << p->age << "分數:" << p->score <<endl;
    
    system("pause");
	return 0;
}
           

總結:結構體指針可以通過 -> 操作符來通路結構體中的成員

結構體嵌套結構體

作用:結構體中的成員可以是另一個結構體

例如:每個老師輔導一個學生,一個老師的結構體中,記錄一個學生的結構體

//學生結構體定義
struct student{
    //成員清單
    string name; //姓名
    int age;	 //年齡
    int score;   //分數
};

//教師結構體定義
struct teacher(){
    //成員清單
    int id;			//職工編号
    string name;	//教師姓名
    int age;		//教師年齡
    struct student stu; //子結構體 學生
};

int main(){
    struct teacher t1;
    t1.id = 10000;
    t1.name = "老王";
    t1.age = 40;
    
    t1.stu.name = "張三";
    t1.stu.age = 18;
    t1.stu.score = 100;
    
    cout << "教師職工編号:" << t1.id << "姓名:" << t1.name << "年齡:" << t1.age << endl;
    cout << "學生姓名:" << t1.stu,name << "年齡:" << t1.stu.age << "分數:" << t1.stu.score <<endl;
    
    system("pause");
    return 0;
}
           

總結:在結構體中可以定義另一個結構體作為成員,用來解決實際問題

結構體做函數參數

作用:将結構體作為參數向函數中傳遞

  • 值傳遞
  • 位址傳遞
//學生結構體定義
struct student{
    //成員清單
    string name; //姓名
    int age;	 //年齡
    int score;   //分數
};

//值傳遞
void printStudent1(struct student s ){
    stu.age = 28;
    cout <<"子函數1中 姓名:" << s.name << "年齡:" << s.age << "分數:" << s.score << endl;
}

//位址傳遞
void printStudent2(struct student * p){
    stu->age = 28;
    cout <<"子函數2中 姓名:" << p->name << "年齡:" << p->age << "分數:" << p->score << endl;
}

int main(){
    //建立結構體變量
    struct student s;
    s.name = "張三";
    s.age = 20;
    s.score = 85;
    
    printStudent1(s);
    cout <<"主函數中 姓名:" << s.name << "年齡:" << s.age << "分數:" << s.score << endl;
    
    printStudent2(&s);
    cout <<"主函數中 姓名:" << s.name << "年齡:" << s.age << "分數:" << s.score << endl;
    
    system("pause");
    return 0;
}
           

結構體中const使用場景

//學生結構體定義
struct student{
    //成員清單
    string name; //姓名
    int age;	 //年齡
    int score;   //分數
};

//将函數中的形參改為指針,可以減少記憶體空間,而且不會複制新的副本出來
void printStudents(const student *s){    
    //s->age = 150; //加入const之後,一旦有修改的操作就會報錯,可以防止我們的誤操作
    cout <<"姓名:" << s->name << "年齡:" << s->age << "分數:" << s->score << endl;
}

int main(){
    //建立結構體變量
    struct student s = {"張三", 15, 70};
    
    //通過函數列印結構體變量資訊
    printStudents(&s);
    
    system("pause");
    return 0;
}