浅析C++中结构体的定义、初始化和引用

 更新时间:2013年09月02日 09:21:44   作者:  
以下是对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 style="WHITE-SPACE: pre"> </SPAN> &nbsp; &nbsp; &nbsp; 10001,
<SPAN style="WHITE-SPACE: pre"> </SPAN> &nbsp; &nbsp; &nbsp; "qianshou",
<SPAN style="WHITE-SPACE: pre"> </SPAN> &nbsp; &nbsp; &nbsp; 'm',
<SPAN style="WHITE-SPACE: pre"> </SPAN> &nbsp; &nbsp; &nbsp; 19,
<SPAN style="WHITE-SPACE: pre"> </SPAN> &nbsp; &nbsp; &nbsp; "100",
<SPAN style="WHITE-SPACE: pre"> </SPAN> &nbsp; &nbsp; &nbsp; "JiNan"
<SPAN style="WHITE-SPACE: pre"> </SPAN> &nbsp; };

结构体变量的引用
在定义了结构体变量之后,就可以引用这个变量。

(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;
}


相关文章

  • C 语言基础----详解C中的运算符

    C 语言基础----详解C中的运算符

    这篇文章主要介绍了C语言中的运算符,文中讲解非常详细,适合初学小白进行学习,想入门C语言的朋友不妨了解下
    2020-06-06
  • Qt编写地图之实现覆盖物坐标和搜索

    Qt编写地图之实现覆盖物坐标和搜索

    地图应用中经常会需要有覆盖物坐标和搜索的功能,本文将利用Qt实现这一功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-03-03
  • C语言实现大整数加减运算详解

    C语言实现大整数加减运算详解

    大数运算,顾名思义,就是很大的数值的数进行一系列的运算。本文通过实例演示如何进行C语言中的大整数加减运算,有需要的可以参考借鉴。
    2016-08-08
  • Qt数据库应用之实现数据分组导出

    Qt数据库应用之实现数据分组导出

    这篇文章主要为大家详细介绍了如何利用Qt实现数据库数据分组导出,文中的示例代码讲解详细,对我们学习或工作有一定参考价值,需要的可以了解一下
    2022-06-06
  • 详解为什么指针被誉为C语言灵魂

    详解为什么指针被誉为C语言灵魂

    说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解。不了解的对指针的理解就停留在“指针就是变量的地址”这句话,会比较害怕使用指针,特别是各种高级操作。本文将带你详细了解C语言指针
    2021-06-06
  • C++中pair使用的示例代码

    C++中pair使用的示例代码

    本文主要介绍了C++中pair使用的示例代码,用于存储两个不同类型的元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • C语言 sockaddr和sockaddr_in案例详解

    C语言 sockaddr和sockaddr_in案例详解

    这篇文章主要介绍了C语言 sockaddr和sockaddr_in案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C#使用反射加载多个程序集的实现方法

    C#使用反射加载多个程序集的实现方法

    下面小编就为大家带来一篇C#使用反射加载多个程序集的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • C语言实现三子棋游戏简易版

    C语言实现三子棋游戏简易版

    这篇文章主要为大家详细介绍了C语言实现三子棋游戏简易版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 介绍C语言中tolower函数的实例

    介绍C语言中tolower函数的实例

    这篇文章主要介绍了介绍C语言中tolower函数的实例,本文列出了该函数的头文件,功能说明等,以及如何使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论