博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构体与共同体
阅读量:6486 次
发布时间:2019-06-23

本文共 3414 字,大约阅读时间需要 11 分钟。

数据的基本类型包括:整形(int)、实型(float)、字符型(char)。也介绍了一种构造类型数据——数组.但是数组中的各元素要求属于同一种类型。有时候,仅仅用一种类型是不够的,需要将不同的数据组合成一个有机的整体,以便于引用。我们于是定义了结构体的概念。

1 suruct  student  //student称为结构体类型名 2 {
3 int num; 4 char name[20]; 5 int age; 6 float score; 7 char addr[30] 8 };

 注意不要忘记最后的分号。

 一.定义结构体类型变量的方法

 (1)先声明结构体类型,再定义变量名

 struct student   student1,student2;

    (结构体类型)     (变量1) (变量2)    

      如果程序的规模较大,往往将对结构体类型的声明集中放到一个头文件中(以.h为后缀名)。哪个源文件需要用到此类的结构体只要包含该头文件即可。

 (2)在声明结构体类型的时候定义变量

struct student{int ...char ...int ...}student1,student2;

 (3)直接定义结构体类型变量

 

struct{int ...char ...int ...}student1,student2;

 

 (2)和(3)的区别仅在于(3)中没有出现结构体名。但是在实际的应用中,我们一般采用(2)并且加上typedef的声明。

二.对于结构体类型的几点说明

(1)类型与变量是两个不同的概念。只能对变量进行赋值,存取或运算,而不能对一个类型进行这些操作。编译时,只对变量进行空间的分配,而不会对类型进行空间的分配。

(2)对结构体中的成员,也可以单独使用

(3)成员也可以是一个结构体变量

(4)成员名和程序中的变量名是可以相同的,两者并不冲突。

三.结构体变量的引用

结构体变量名.成员名

四.结构体变量的初始化

和其他的类型变量类似,对结构体变量可以在定义时指定初始值

 

struct{int ...char ...  int ... }student1={“100010”,"XiaoQiang","98.5"};

 

 五. 一个结构体变量中可以存放一组数据(如学生的姓名、学号等)。如果有10个学生的数据需要参加运算显然需要用到数组。这就是结构体数组。

 

struct student{int ...char ...float ...}student1;struct student  student1[10];

 

 六. 结构体数组的初始化

struct student student1[4]={

{},{},{},{}};

---------------------------------------------------------------------------

七.指向结构体类型数据的指针

一个结构体变量的指针就是指向该变量所占据的内存的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时,该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。

#include
#include
#include
using namespace std; void main() {
struct student {
int num; char name[100]; float score; }; struct student stu; struct student *P; p=&stu; //此处说明结构体的变量名不代表地址 cout<
<
num<

我们看到的三种调用方式,第一种为结构体变量的调用,第二种为指向结构体指针的调用,第三种是第二种的变形。

八. 指向结构体数组的指针

1 #include
2 #include
3 4 using namespace std; 5 6 struct student{
7 int num; 8 char name[]; 9 float score; 10 }; 11 12 struct student stu[3]={
{},{},{}}; //定义个一个结构体数组 13 14 void main() 15 {
16 struct student *p; 17 p=stu; //数组名代表的初始地址 18 for (p=stu;p
num<
name>>p->score<

我们再分析一下该结构体数组在内存中的存储方式:

和二维数组的存储方式一致。stu[0]理解为第一行第一列即stu[0][0]元素的首地址。

九 用结构体变量和指向结构体变量的指针作为函数参数

将一个结构体变量的值传给另一个函数,由三种方式;

 (1)用结构体变量的成员作为参数

 (2)用结构体变量作为实参

这两种都是属于“值传递”的形式,所以,如果结构体的内容如果比较多,则传递就比较庞大,复杂。

例:

#include "stdafx.h" #include 
using namespace std; struct student {
int num; char name[10]; float score; }stu={
210,"XiaoHong",98}; int _tmain(int argc, _TCHAR* argv[]) {
void output(struct student);//the declear of the function output(stu); //the call of the function return 0; } //the define of the function void output(struct student value) {
cout<
<<" "<
<<" "<
<<" "<
 

 (3)用指向结构体变量(或数组)的指针做实参

 例:

#include "stdafx.h" #include 
using namespace std; struct student {
int num; char name[10]; float score; }stu={
210,"XiaoHong",98}; int _tmain(int argc, _TCHAR* argv[]) {
struct student *p; void output(struct student *value);//the declear of the function output(&stu); //the call of the function return 0; } //the define of the function void output(struct student *value) {
cout<
name<<" "<
num<<" "<
score<<" "<

 

 (未完......)

转载于:https://www.cnblogs.com/CBDoctor/archive/2012/01/10/2318174.html

你可能感兴趣的文章
K & DN 的前世今生(微软开源命名变革)
查看>>
--@angularJS--angular与BootStrap3的应用
查看>>
10款很好用的 jQuery 图片滚动插件
查看>>
Flask服务入门案例
查看>>
ReadWriteLock与ReentrantReadWriteLock
查看>>
Atitit.软件命名空间 包的命名统计 及命名表(2000个名称) 方案java package...
查看>>
新手指导:教你如何查看识别hadoop是32位还是64位
查看>>
Codeforces Round #180 (Div. 2) D. Fish Weight 贪心
查看>>
Gradle sourceCompatibility has no effect to subprojects(转)
查看>>
百度指数分析
查看>>
使用Mkdocs构建你的项目文档
查看>>
三分钟读懂TT猫分布式、微服务和集群之路
查看>>
fn project 运行时配置选项
查看>>
你的leader还在考核你的千行代码Bug率吗?
查看>>
多块盘制作成一个lvm
查看>>
InnoDB多版本
查看>>
贪心算法 - 活动选择问题
查看>>
独立思考与输入、吸收
查看>>
es6 includes(), startsWith(), endsWith()
查看>>
关于azkaban上传job压缩包报错问题的解决方案
查看>>