国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

淺析C++中結(jié)構(gòu)體的定義、初始化和引用

2020-01-26 15:55:09
字體:
供稿:網(wǎng)友

定義:
結(jié)構(gòu)體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合,也叫結(jié)構(gòu)。

聲明一個結(jié)構(gòu)體類型的形式是:

復(fù)制代碼 代碼如下:

struct Student{      //聲明一個結(jié)構(gòu)體類型Student
 int num;         //聲明一個整形變量num
 char name[20];   //聲明一個字符型數(shù)組name
 char sex;        //聲明一個字符型變量sex
 int age;         //聲明一個整形變量age
 float score;     //聲明一個單精度型變量
 char addr[30];   //聲明一個字符型數(shù)組addr
}

結(jié)構(gòu)體類型變量的定義方法及初始化

定義結(jié)構(gòu)體變量的方法:
(1)先聲明結(jié)構(gòu)體類型在定義變量名

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組addr
   };
   Student student1,student2;// 定義結(jié)構(gòu)體類型變量student1和student2
   cout<<sizeof(Student)<<endl;
   cout<<sizeof(student1)<<endl;
   cout<<sizeof(student2)<<endl;    
   return 0;
}


在定義了結(jié)構(gòu)體變量之后,系統(tǒng)會為之分配內(nèi)存單元。(可以用sizeof函數(shù)查看分配的字節(jié)數(shù),不同的編譯系統(tǒng)存在差異)

(2)在聲明類型的同時定義變量

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組addr
   }student1,student2;//聲明變量student1和student2
   cout<<sizeof(Student)<<endl;
   cout<<sizeof(student1)<<endl;
   cout<<sizeof(student2)<<endl;    
   return 0;
}

(3)直接定義結(jié)構(gòu)體類型變量
復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 struct {      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組addr
   }student1,student2;//聲明變量student1和student2
   cout<<sizeof(student1)<<endl;
   cout<<sizeof(student2)<<endl;    
   return 0;
}


這種定義方法雖然合法,但是不常用。比較常用的是第一種方法。

關(guān)于結(jié)構(gòu)體的類型要注意的幾點(diǎn):
(1)類型與變量是不同的概念,不要混淆。只能對結(jié)構(gòu)體變量中的成員賦值,而不能對結(jié)構(gòu)體類型賦值。

(2)對結(jié)構(gòu)體變量中的成員(即“域”),可以單獨(dú)使用,它的作用與地位相當(dāng)于同類型的普通變量。

(3)結(jié)構(gòu)體的成員也可以是一個結(jié)構(gòu)體變量。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
 struct Date{        //聲明一個結(jié)構(gòu)體類型Date
  int month;      //日期中的月份
  int day;        //日期中的天
  int year;       //日期中的年份
 };
 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  Date birthday;   //Date是結(jié)構(gòu)體類型,birthday是Date的類型的變量
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組addr
   };
int main(){
   Student qianshou;
   Date     riqi;
   cout<<sizeof(riqi)<<endl;
   cout<<sizeof(qianshou)<<endl; 
   return 0;
}




(5)結(jié)構(gòu)體中的成員名可以與程序中的變量名相同,但二者沒有關(guān)系。

例如,程序中可以另定義一個整形變量,他與student中的num是兩回事,互不影響。

2 結(jié)構(gòu)體變量的初始化
(1)在定義結(jié)構(gòu)體時對結(jié)構(gòu)體變量指定初始值

復(fù)制代碼 代碼如下:

 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組addr
       } student1={
             10001,
            "qianshou",
             'm',
             19,
             "100",
             "JiNan"
       };

(2)在定義變量時進(jìn)行初始化(這種方法更常用)
復(fù)制代碼 代碼如下:

 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組addr
   };
    Student student1={
<SPAN style="WHITE-SPACE: pre"> </SPAN>       10001,
<SPAN style="WHITE-SPACE: pre"> </SPAN>       "qianshou",
<SPAN style="WHITE-SPACE: pre"> </SPAN>       'm',
<SPAN style="WHITE-SPACE: pre"> </SPAN>       19,
<SPAN style="WHITE-SPACE: pre"> </SPAN>       "100",
<SPAN style="WHITE-SPACE: pre"> </SPAN>       "JiNan"
<SPAN style="WHITE-SPACE: pre"> </SPAN>   };

結(jié)構(gòu)體變量的引用
在定義了結(jié)構(gòu)體變量之后,就可以引用這個變量。

(1)引用結(jié)構(gòu)體變量中的一個成員的值

引用方式:結(jié)構(gòu)體變量名.成員名

其中“.”是成員運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級最高。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
 struct Date{        //聲明一個結(jié)構(gòu)體類型Date
  int month;      //日期中的月份
  int day;        //日期中的天
  int year;       //日期中的年份
 };
 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  Date birthday;   //Date是結(jié)構(gòu)體類型,birthday是Date的類型的變量
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組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;
}




如果一個成員本社也是一個結(jié)構(gòu)體類型,則要用若干個成員運(yùn)算符,一級一級地找到最低一級的成員。

例如:

復(fù)制代碼 代碼如下:

  cout<<one.birthday.month<<"/"<<one.birthday.day<<"/"<<one.birthday.year<<endl;

(2)可以將一個結(jié)構(gòu)體變量的值付給另外一個具有形同機(jī)構(gòu)的結(jié)構(gòu)體變量。
復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
 struct Date{        //聲明一個結(jié)構(gòu)體類型Date
  int month;      //日期中的月份
  int day;        //日期中的天
  int year;       //日期中的年份
 };
 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  Date birthday;   //Date是結(jié)構(gòu)體類型,birthday是Date的類型的變量
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組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)可以引用結(jié)構(gòu)體變量的地址,也可以引用結(jié)構(gòu)體變量成員的地址。
復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
 struct Date{        //聲明一個結(jié)構(gòu)體類型Date
  int month;      //日期中的月份
  int day;        //日期中的天
  int year;       //日期中的年份
 };
 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex;        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  Date birthday;   //Date是結(jié)構(gòu)體類型,birthday是Date的類型的變量
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組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;
}




一個小實(shí)例:
復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
 struct Date{        //聲明一個結(jié)構(gòu)體類型Date
  int month;      //日期中的月份
  int day;        //日期中的天
  int year;       //日期中的年份
 };
 struct Student{      //聲明一個結(jié)構(gòu)體類型Student
  int num;         //聲明一個整形變量num
  char name[20];   //聲明一個字符型數(shù)組name
  char sex[5];        //聲明一個字符型變量sex
  int age;         //聲明一個整形變量age
  Date birthday;   //Date是結(jié)構(gòu)體類型,birthday是Date的類型的變量
  float score;     //聲明一個單精度型變量
     char addr[30];   //聲明一個字符型數(shù)組addr
   };
int main(){
   Student one;
   //輸入信息
   cout<<"請輸入學(xué)號:";
   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<<"學(xué)號:"<<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;
}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 哈密市| 宿迁市| 沙坪坝区| 临夏市| 衡阳市| 若尔盖县| 呼图壁县| 东方市| 宁陕县| 双桥区| 东乌珠穆沁旗| 乐业县| 中西区| 临城县| 延吉市| 方城县| 宜春市| 祁东县| 白城市| 泸溪县| 阿图什市| 肇州县| 安顺市| 丹凤县| 黄陵县| 上蔡县| 日土县| 方正县| 冷水江市| 香港 | 丽水市| 峨眉山市| 屏边| 社会| 昭苏县| 青川县| 武汉市| 宁强县| 亳州市| 基隆市| 抚宁县|