结构体数组

 

结构体数组定义

TAG: 结构体,结构体数组,结构体数组定义
TEXT: 数组是一组具有相同数据类型变量的有序集合,可以通过下标获得其中的任意元素。结构体类型数组与基本类型数组的定义与引用规则是相同的,区别在于结构体数组中的所有元素均为结构体变量。

结构体变量有三种定义方法,因此结构体数组也具有三种定义方法,如下:
方式1:
struct 结构体标识符
{
成员变量列表;
};
struct 结构体标识符 数组名[数组长度];
方式2:
struct 结构体标识符
{
成员变量列表;
} 数组名[数组长度];
方式3:
struct
{
成员变量列表;
} 数组名[数组长度];
其中“数组名”为数组名称,遵循变量的命名规则;“数组长度”为数组的长度,要求为大于零的整型常量。例如:定义长度为10的struct Point类型数组oPoints的方法有如下三种形式:
方式1:

struct Point

{
double x;
double y;
double z;
};
struct Point  oPoints[10];
方式2:
struct Point
{
double x;
double y;
double z;
} oPoints[10];
方式3:
struct
{
double x;
double y;
double z;
} oPoints[10];
结构体数组oPoints在内存中的连续存放,如图所示:
在内存中的存储顺序如下:
oPoints [0].x
oPoints [0].y
oPoints [0].z
oPoints [1].x
oPoints [1].y
oPoints [1].z
oPoints [2].x
……

结构体数组的初始化
TAG: 结构体,结构体数组,结构体数组的初始化
TEXT: 结构体类型数组的初始化遵循基本数据类型数组的初始化规律,在定义数组的同时,对其中的每一个元素进行初始化。例如:
struct Student /* 定义结构体struct Student*/
{
char Name[20]; /* 姓名*/
float Math; /* 数学*/
float English; /* 英语*/
float Physical; /* 物理*/
}oStus[2]={
{ “Liming”,78,89,95},
{ “Majun”,87,79,92}
};
在定义结构体struct Student 的同时定义长度为2的struct Student 类型数组oStus,并分别对每个元素进行初始化,每个元素的初始化规律遵循结构体变量的初始化规律。
在定义数组并同时进行初始化的情况下,可以省略数组的长度,系统根据初始化数据的多少来确定数组的长度。例如:
struct Key
{
char word[20];
int count;
}keytab[]={
{ “break”,0},
{ “case”,0},
{ “void”,0}
};
结构体数组keytab的长度,系统自动确认为3。
结构体数组的引用
TAG: 结构体,结构体数组,结构体数组的引用
TEXT: 对于数组的引用,分为数组元素和数组本身的引用。对于数组元素的引用,其实质为简单变量的引用。对于数组本身的引用实质是数组首地址的引用。
REF:.txt
 数组元素的引用
TAG: 结构体,结构体数组,结构体数组的引用
TEXT:
数组元素引用的语法形式如下:
数组名[数组下标];
[] 为下标运算符;数组下标的取值范围为(0,1,2,...,n-1),n为数组长度。
例9-2 在屏幕上绘制任意一封闭的多边形。
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h> /* 与图形输出相关的库函数*/
#define NPOINTS 4
struct Point
{
double x; /*x 坐标*/
double y; /*y 坐标*/
double z; /*z 坐标*/
};
/* 全局变量*/
int GraphDriver; /* 图形设备的驱动程序ID */
int GraphMode; /* 图形模式ID */
/* 图形模式初始化函数*/
void Initialize(void);
/* 多边形绘制函数*/
void Mutiline(struct Point oPts[]);
int main()
{
struct Point oPoints[NPOINTS]={
{100 ,100,0},
{500 ,100,0},
{500 ,200,0},
{100 ,200,0},
}; /* 定义多边形的定点信息*/
Initialize(); /* 将当前的系统输出模式调整为图形模式*/
Mutiline(oPoints); /* 绘制多边形*/
getchar(); /* 暂停 */
/* 将当前的系统输出模式调回文本模式,为图形库函数*/
closegraph();
return(0);
}

/* 将当前的系统输出模式调整为图形模式*/
void Initialize(void)
{
int ErrorCode; /* 错误状态信息*/
GraphDriver = DETECT; /* 要求系统自动检测,DETECT为符号常量,
在graphics.h 定义*/
/* 调用图形库函数initgraph,将当前的系统输出模式调整为图形模式*/
initgraph( &GraphDriver , &GraphMode, "" );
ErrorCode = graphresult(); /* 检测当前的图形输出状态,graphresult()为
图形库函数*/
if( ErrorCode != grOk )
{
/* 说明在将当前的系统输出模式调整为图形模式的过程中出现错误 */
/* 打印错误信息 */
printf(" Graphics System Error: %s/n" , grapherrormsg( ErrorCode ) );
/* 退出应用程序 */
exit( 1 );
}
}
/* 多边形绘制函数,形式参数为struct Point 类型数组oPoints */
void Mutiline(struct Point oPoints[])
{
int i;
moveto(oPoints[0].x ,oPoints[0].y) ;
for( i=0 ; i<NPOINTS ; ++i )
lineto(oPoints[i].x , oPoints[i].y);
lineto(oPoints[0].x ,oPoints[0].y);
}
程序运行结果如下:
函数 Initialize(void)的作用是将当前的输出模式由文本模式切换到图形模式,标准图形库函数closegraph()的作用是将输出模式返回到文本模式。
函数Mutiline(struct Point oPts[])的作用是在屏幕上,根据输入参数struct Point oPts[]绘制封闭的多边形。
函数moveto()和lineto()为标准的图形库函数,其函数的声明在标准头文件graphics.h中,型式如下:
void lineto(int x, int y);
void moveto(int x, int y);
其中int x, int y为屏幕的坐标(x,y)。moveto(oPoints[0].x,oPoints[0].y) 的作用是将绘图的起始点移至oPoints[0];lineto(oPoints[i].x,oPoints[i].y)的作用是从上一点到当前点绘制一条直线,依次第一点和第二点间划线,第二点和第三点间划线,……第n-1点和第n点间划线。lineto(oPoints[0].x,oPoints[0].y)的作用是在第n点和第1点间划线。从而绘制出封闭的多边形。


REF:.txt
 数组的引用
TAG: 结构体,结构体数组,结构体数组的引用
TEXT: 数组作为一个整体的引用,一般表现在如下两个方面:1)作为一块连续存储单元的起始地址与结构体指针变量配合使用,此问题在结构体指针部分将作深入地讲解。2)作为函数参数。函数void Mutiline(struct Point oPoints[])的形式参数为结构体类型数组,在调用函数时将实际参数struct Point oPoints[NPOINTS]作为整体传入,如Mutiline(oPoints)。
REF:.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值