淺析C++中構造體的界說、初始化和援用。本站提示廣大學習愛好者:(淺析C++中構造體的界說、初始化和援用)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析C++中構造體的界說、初始化和援用正文
界說:
構造體(struct)是由一系列具有雷同類型或分歧類型的數據組成的數據聚集,也叫構造。
聲明一個構造體類型的情勢是:
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
}
構造體類型變量的界說辦法及初始化
界說構造體變量的辦法:
(1)先聲明構造體類型在界說變量名
#include<iostream>
using namespace std;
int main(){
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
};
Student student1,student2;// 界說構造體類型變量student1和student2
cout<<sizeof(Student)<<endl;
cout<<sizeof(student1)<<endl;
cout<<sizeof(student2)<<endl;
return 0;
}
在界說了卻構體變量以後,體系會為之分派內存單位。(可以用sizeof函數檢查分派的字節數,分歧的編譯體系存在差別)
(2)在聲明類型的同時界說變量
#include<iostream>
using namespace std;
int main(){
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
}student1,student2;//聲明變量student1和student2
cout<<sizeof(Student)<<endl;
cout<<sizeof(student1)<<endl;
cout<<sizeof(student2)<<endl;
return 0;
}
(3)直接界說構造體類型變量
#include<iostream>
using namespace std;
int main(){
struct { //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
}student1,student2;//聲明變量student1和student2
cout<<sizeof(student1)<<endl;
cout<<sizeof(student2)<<endl;
return 0;
}
這類界說辦法固然正當,然則不經常使用。比擬經常使用的是第一種辦法。
關於構造體的類型要留意的幾點:
(1)類型與變量是分歧的概念,不要混雜。只能對構造體變量中的成員賦值,而不克不及對構造體類型賦值。
(2)對構造體變量中的成員(即“域”),可以零丁應用,它的感化與位置相當於同類型的通俗變量。
(3)構造體的成員也能夠是一個構造體變量。
#include<iostream>
using namespace std;
struct Date{ //聲明一個構造體類型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
Date birthday; //Date是構造體類型,birthday是Date的類型的變量
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
};
int main(){
Student qianshou;
Date riqi;
cout<<sizeof(riqi)<<endl;
cout<<sizeof(qianshou)<<endl;
return 0;
}
(5)構造體中的成員名可以與法式中的變量名雷同,但兩者沒有關系。
例如,法式中可以另界說一個整形變量,他與student中的num是兩回事,互不影響。
2 構造體變量的初始化
(1)在界說構造體時對構造體變量指定初始值
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
} student1={
10001,
"qianshou",
'm',
19,
"100",
"JiNan"
};
(2)在界說變量時停止初始化(這類辦法更經常使用)
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
};
Student student1={
<SPAN > </SPAN> 10001,
<SPAN > </SPAN> "qianshou",
<SPAN > </SPAN> 'm',
<SPAN > </SPAN> 19,
<SPAN > </SPAN> "100",
<SPAN > </SPAN> "JiNan"
<SPAN > </SPAN> };
構造體變量的援用
在界說了卻構體變量以後,便可以援用這個變量。
(1)援用構造體變量中的一個成員的值
援用方法:構造體變量名.成員名
個中“.”是成員運算符,它在一切的運算符中優先級最高。
#include<iostream>
using namespace std;
struct Date{ //聲明一個構造體類型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
Date birthday; //Date是構造體類型,birthday是Date的類型的變量
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
};
int main(){
Student one={001,"qianshou",'m',19,10,1,1993,100,"JiNan"};
cout<<one.num<<endl;
cout<<one.name<<endl;
cout<<one.sex<<endl;
cout<<one.age<<endl;
cout<<one.birthday.month<<"/"<<one.birthday.day<<"/"<<one.birthday.year<<endl;
cout<<one.score<<endl;
cout<<one.addr<<endl;
return 0;
}
假如一個成員本社也是一個構造體類型,則要用若干個成員運算符,一級一級地找到最低一級的成員。
例如:
cout<<one.birthday.month<<"/"<<one.birthday.day<<"/"<<one.birthday.year<<endl;
(2)可以將一個構造體變量的值付給別的一個具無形同機構的構造體變量。
#include<iostream>
using namespace std;
struct Date{ //聲明一個構造體類型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
Date birthday; //Date是構造體類型,birthday是Date的類型的變量
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
};
int main(){
Student two={1,"qianshou",'m',19,10,01,1993,100,"JiNan"};
Student one=two;
cout<<one.num<<endl;
cout<<one.name<<endl;
cout<<one.sex<<endl;
cout<<one.age<<endl;
cout<<one.birthday.month<<"/"<<one.birthday.day<<"/"<<one.birthday.year<<endl;
cout<<one.score<<endl;
cout<<one.addr<<endl;
return 0;
}
(3)可以援用構造體變量的地址,也能夠援用構造體變量成員的地址。
#include<iostream>
using namespace std;
struct Date{ //聲明一個構造體類型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
Date birthday; //Date是構造體類型,birthday是Date的類型的變量
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
};
int main(){
Student two={1,"qianshou",'m',19,10,01,1993,100,"JiNan"};
Student &one=two;
one.num++;
one.birthday.day+=10;
cout<<two.num<<endl;
cout<<two.name<<endl;
cout<<two.sex<<endl;
cout<<two.age<<endl;
cout<<two.birthday.month<<"/"<<two.birthday.day<<"/"<<two.birthday.year<<endl;
cout<<two.score<<endl;
cout<<two.addr<<endl;
return 0;
}
一個小實例:
#include<iostream>
using namespace std;
struct Date{ //聲明一個構造體類型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //聲明一個構造體類型Student
int num; //聲明一個整形變量num
char name[20]; //聲明一個字符型數組name
char sex[5]; //聲明一個字符型變量sex
int age; //聲明一個整形變量age
Date birthday; //Date是構造體類型,birthday是Date的類型的變量
float score; //聲明一個單精度型變量
char addr[30]; //聲明一個字符型數組addr
};
int main(){
Student one;
//輸出信息
cout<<"請輸出學號:";
cin>>one.num;
cout<<"請輸出姓名:";
cin>>one.name;
cout<<"請輸出性別:";
cin>>one.sex;
cout<<"請輸出年紀:";
cin>>one.age;
cout<<"請輸出誕辰的年 月 日:";
cin>>one.birthday.year;
cin>>one.birthday.month;
cin>>one.birthday.day;
cout<<"請輸出你的成就:";
cin>>one.score;
cout<<"請輸出地址:";
cin>>one.addr;
//輸入信息
cout<<"\n以下是你的信息\n";
cout<<"學號:"<<one.num<<endl;
cout<<"姓名:"<<one.name<<endl;
cout<<"性別:"<<one.sex<<endl;
cout<<"年紀:"<<one.age<<endl;
cout<<"誕辰:"<<one.birthday.year<<"/"<<one.birthday.month<<"/"<<one.birthday.day<<endl;
cout<<"成就:"<<one.score<<endl;
cout<<"地址:"<<one.addr<<endl;
return 0;
}