定义:

结构体(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={
      10001,
      "qianshou",
      'm',
      19,
      "100",
      "JiNan"
  };

结构体变量的引用

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

(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++结构体的定义、初始化和引用的更多相关文章

  1. c语言中结构体的定义、初始化及内存分配

    #include <stdio.h> struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数 ...

  2. C++结构体成员列表初始化

    C++关于struct和class的区别,可以看上一篇文章:c ++ class和struct[转] 结构体成员列表初始化,来个例子: #include <iostream> #inclu ...

  3. c语言结构体指针必须初始化

    先说结论 结构体指针需要初始化 结构体指针的成员指针同样需要初始化 结构体变量定义的时候就已经分配了内存空间,而上面两个确没有 struct test{ int i; struct buf *p;} ...

  4. go语言基础之结构体普通变量初始化

    1.结构体 1.1.结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性.显然单独定义以上变量比较繁琐,数据不便于管理. 结构体是一种聚合的数 ...

  5. 结构体类型定义(C语言)

    结构体的定义形式如下: struct 结构体名 { 结构体成员 }: 结构体变量的定义方式有三种:1.先定义结构体,再定义变量: eg. struct student{ char name[10]; ...

  6. C /C ++中结构体的定义

    c语言中结构体的定义: struct 结构体名{ 成员列表: ..... }结构体变量: 7.1.1 结构体类型变量的定义结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问 ...

  7. NoSQL的CURD结构体的定义

    NoSQL的CURD结构体的定义 flyfish 2015-7-23 參考MongoDB Wire Protocol  在这里document部分使用json表示 使用boost::property_ ...

  8. 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法

    一.关于全局变量的定义.声明.引用: (只要是在.h文件中定义的变量,然后在main.c中包含该.h文件,那么定义的变量就可以在main函数中作为全局变量使用) 方法1: 在某个c文件里定义全局变量后 ...

  9. keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法

    以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧! 后来学会了在keil里进行模块化编程,即只把功能相同或 ...

随机推荐

  1. 关于使用java开发Mis系统的相关内容。

    怎样使用java编程语言开发一个小型的信息管理系统,首先我们要知道用什么样的方法来开发这一系统. 1.java简单基础知识: (1)Java的三种技术架构: 1)JAVAEE:Java Platfor ...

  2. 水滴效果的下拉刷新--第三方开源 开源--WaveSwipeRefreshLayout

    下载地址:https://github.com/recruit-lifestyle/WaveSwipeRefreshLayout 直接把代码复制到你的项目于即可使用: 使用: 在xml中: <j ...

  3. 用Java实现异构数据库的高效通用分页查询功能

    不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...

  4. ZOJ2112 Dynamic Rankings (线段树套平衡树)(主席树)

    The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...

  5. .NET MVC 异步提交和返回参数

    一.后台页面中的接收方法和返回写法 Jsonresult意味着返回值是json格式,也可以是string或者int等其他类型. Httppost代表只接受Post方法. Mvc中返回Jsonresul ...

  6. django1.7 HTML模板中{%url%}的使用

    转载:https://my.oschina.net/jastme/blog/345265

  7. Python函数-round() 函数

    round( x [, n] )功能: round() 方法返回浮点数x的四舍五入值. x-数值表达式.n-数值表达式.返回浮点数x的四舍五入值. 实例: #!/usr/bin/python prin ...

  8. Logstash详解之——input模块

    原文地址 Logstash由三个组件构造成,分别是input.filter以及output.我们可以吧Logstash三个组件的工作流理解为:input收集数据,filter处理数据,output输出 ...

  9. XSS与CSRF攻击

    一.XSS Cross Site Script,跨站脚本攻击.是指攻击者在网站上注入恶意客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一 ...

  10. k近邻算法C++二维情况下的实现

    k近邻算法C++二维实现 这是一个k近邻算法的二维实现(即K=2的情况). #include <cstdio> #include <cstring> #include < ...