服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 浅析C++中结构体的定义、初始化和引用

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

2020-12-24 14:10C++教程网 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;
}

 

 

 

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

在定义了结构体变量之后,系统会为之分配内存单元。(可以用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;
}



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

 

这种定义方法虽然合法,但是不常用。比较常用的是第一种方法。

关于结构体的类型要注意的几点:
(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;
}



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

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



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

如果一个成员本社也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。

 

例如:

复制代码 代码如下:

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



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

一个小实例:

复制代码 代码如下:

#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++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22