结构体的学习

struct
  1. 结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。

  2. 结构中可以使用不同的数据类型。

  3. 结构说明和结构变量定义 在Turbo C中, 结构也是一种数据类型,可以使用结构变量, 因此, 象其它类型的变量一样, 在使用结构变量时要先对其定义。

    定义结构变量的一般格式为:

     struct 结构名
    {
    类型 变量名;
    类型 变量名;
    ...
    } 结构变量;

结构名是结构的标识符不是变量名。

4.类型为第二节中所讲述的五种数据类型(整型、浮点型、字符型、指针型和

无值型)。 构成结构的每一个类型变量称为结构成员, 它象数组的元素一样, 但数组中 元素是以下标来访问的,而结构是按变量名字来访问成员的。

下面举一个例子来说明怎样定义结构变量。

 struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} person;

这个例子定义了一个结构名为string的结构变量person, 如果省略变量名 person, 则变成对结构的说明。用已说明的结构名也可定义结构变量。这样定义时上例变成:

 struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
};
struct string person;

如果需要定义多个具有相同形式的结构变量时用这种方法比较方便, 它先作

结构说明, 再用结构名来定义变量。

例如:
struct string Tianyr, Liuqi, ...;
如果省略结构名, 则称之为无名结构, 这种情况常常出现在函数内部, 用这

种结构时前面的例子变成:

 struct
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} Tianyr, Liuqi;

结构变量的使用

结构是一个新的数据类型, 因此结构变量也可以象其它类型的变量一样赋值、 运算,不同的是结构变量以成员作为基本变量。

结构成员的表示方式为:结构变量.成员名 如果将"结构变量.成员名"看成一个整体, 则这个整体的数据类型与结构中该成员的数据类型相同,这样就可象前面所讲的变量那样使用。

下面编写的代码定义了一个结构变量,其中每个成员都从键盘接收数据,然后对结构中的浮点数求和,并显示运算结果,同时将数据以文本方式存入一个名为wage.dat的磁盘文件中。

结构数组和结构指针

结构是一种新的数据类型, 同样可以有结构数组和结构指针。

一、结构数组

结构数组就是具有相同结构类型的变量集合。假如要定义一个班级40个同学的姓名、性别、年龄和住址,可以定义成一个结构数组。如下所示:

 struct{
char name[8];
char sex[2];
int age;
char addr[40];
}student[40];
也可定义为:
struct string{
char name[8];
char sex[2];
int age;
char addr[40];
};
struct string student[40];

需要指出的是结构数组成员的访问是以数组元素为结构变量的,其形式为:结构数组元素.成员名

例如:

  student[0].name
student[30].age

实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是

一个结构变量, 第二维是结构成员。

注意

结构数组的成员也可以是数组变量。

例如:

 struct a
{
int m[3][5];
float f;
char s[20];
}y[4];

为了访问结构a中结构变量y[2]的这个变量, 可写成

   y[2].m[1][4]

二、结构指针

结构指针是指向结构的指针。它由一个加在结构变量名前的"*" 操作符来定

义, 例如用前面已说明的结构定义一个结构指针如下:

 struct string{
char name[8];
char sex[2];
int age;
char addr[40];
}*student;

也可省略结构指针名只作结构说明, 然后再用下面的语句定义结构指针。

  struct string *student;

使用结构指针对结构成员的访问, 与结构变量对结构成员的访问在表达方式 上有所不同。结构指针对结构成员的访问表示为:

   结构指针名->结构成员

其中"->"是两个符号"-"和">"的组合, 好象一个箭头指向结构成员。例如要

给上面定义的结构中name和age赋值, 可以用下面语句:

 strcpy(student->name, "Lu G.C");
student->age=18;

实际上, student->name就是(*student).name的缩写形式。需要指出的是结构指针是指向结构的一个指针,即结构中第一个成员的首地址,因此在使用之前应该对结构指针初始化,即分配整个结构长度的字节空间,这可用下面函数完成,仍以上例来说明如下:

 student=(struct string*)malloc(size of

(struct string));

size of (struct string)自动求取string结构的字节长度,malloc()函数定义了一个大小为结构长度的内存区域,然后将其诈地址作为结构指针返回。

  1. 结构作为一种数据类型, 因此定义的结构变量或结构指针变量同样有局

    部变量和全程变量, 视定义的位置而定。
  2. 结构变量名不是指向该结构的地址, 这与数组名的含义不同, 因此若需

    要求结构中第一个成员的首地址应该是&[结构变量名]。
  3. 结构的复杂形式

代码编写的过程截图

定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题。

程序的运行示例如下:

请输入日期(年,月,日)

1990,2,14

2月14日是1990年的第45天。

  1. 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。

C语言 结构体学习的更多相关文章

  1. Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  2. GO语言学习(十六)Go 语言结构体

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

  3. 对嵌入式开发C语言结构体的一点总结

    今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...

  4. 漫谈C语言结构体

    相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...

  5. 漫谈C语言结构体【转】

    相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...

  6. 漫谈C语言结构体struct、公用体union空间占用

    先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...

  7. 解析C语言结构体对齐(内存对齐问题)

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  8. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  9. Go语言结构体(struct)

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

随机推荐

  1. 如何用iOS工程生成iOS模拟器包

    1. 在终端上运行下面的命令来查找你的机器上可用的SDK的版本 xcodebuild -showsdks 2. 创建模拟器包: xcodebuild -workspace ** -scheme ** ...

  2. codeforces 811E Vladik and Entertaining Flags(线段树+并查集)

    codeforces 811E Vladik and Entertaining Flags 题面 \(n*m(1<=n<=10, 1<=m<=1e5)\)的棋盘,每个格子有一个 ...

  3. 【RabbitMQ】2、RabbitMQ入门程序——Hello World

      首先说一下,MQ全称为Message Queue消息队列是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序 ...

  4. 高性能 Socket 组件 HP-Socket v3.2.1-RC3 公布

    HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统.提供 C/C+ ...

  5. MyBatis(3)-映射文件

    本次博文有疑问,请先看MyBatis(1)-简单入门 和 MyBatis(2)-全局配置文件! 如在有疑问,请留言或者咨询博主,博主每天都在!谢谢! 映射文件: 主要是在xxxmapper.xml文件 ...

  6. max函数

    无论是几维,都只返回一个最大的值 >>> a = [1,2,3] >>> np.max(a) 3 >>> a = [[2,1],[3,4]] &g ...

  7. Freeze partial parameters while training

    1. requires_grad = False Set all parameters in the current model frozen: for p in self.parameters(): ...

  8. Centos7在线安装MySQL

    wget dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpmyum localinstall mysql57-community- ...

  9. Microsoft Visio / Project professional 2013 官方版本(下载)

    Microsoft Visio微软开发的一款软件, 它有助于 IT 和商务专业人员轻松地可视化.分析和交流复杂信息. 它能够将难以理解的复杂文本和表格转换为一目了然的 Visio 图表. 该软件通过创 ...

  10. vue面试题!!!

    由于公司需要,需要把项目拆分,前端使用vue框架.最近面试vue总结的试题 1:mvvm框架是什么?它和其他框架的区别是什么? mvvm 全称model view viewModel,model数据模 ...