结构体数组的定义,汇编语言程序中 结构体数组的定义调用方法,尤其是数组的角标(例structa[])中括号里想用变量表示
结构体数组的定义,汇编语言程序中 结构体数组的定义调用方法,尤其是数组的角标(例structa[])中括号里想用变量表示详细介绍
本文目录一览: 什么是数组?结构体与数组的联系与区别是什么?
什么是数组?结构体与数组的联系与区别是什么?
数组是一种存储相同数据类型的多个元素的集合,它们可以使用相同的标识符来访问。
结构体与数组有很大不同:
1. 数组中所有元素都必须是相同的数据类型;而在一个单独的struct中,可以包括不同数据项。
2. 由于structs可以包括不同数据项(例如int、char或float) ;因此它们也能表达多个值。但是由于这些值之间并没有特别的联动性; 另一方面,在array中所有元素之间存在明显的递进性(indexing).
数组与结构体的主要区别如下:
1、定义不同
数组是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量;
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
2、数据类型不同
数组是相同类型元素(元素可以是原子类型的整型、浮点型、字符型或者结构体、数组等)的集合;
结构体是不同类型元素(元素可以是原子类型的整型、浮点型、字符型或者结构体、数组等)的集合。
3、调用方式不同
数组可以直接利用下标访问;
而结构体必须使用结构中成员的变量名。
参考资料来源:百度百科-数组
参考资料来源:百度百科-结构体
结构体数组定义和使用是什么?
结构体是一种构造数据类型也称复杂数据类型,由若干不同类型的变量数据组成。每个变量都是结构体的成员,每个成可以是基本数据类型,也可以是构造类型。
上面的代码定义了一个结构体,名字为stu。stu由4个成员组成,分别为 name、num、score。注意大括号后面的分号;不能少。结构体变量结构体也是一种数据类型,可以用来说明变量。
stu就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。
怎么学习c语言
一个开发环境,例如turbo C 20,这个曾经占据了DOS时代开发程序的大半个江山。windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。
建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。 一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。
除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习。
只有读书做题这么老套。我向大家推荐一个集成学习环境(C语言),里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了。
c语言结构性数组
我测试,不想输入20个学生,就用6个学生测试,你把常量改成20就行。
#include
#include
typedef struct student{ int id; int score;}STU;#define stuNum 6 //学生数量 我测试只用6个学生,你改成20就行void printfStu(STU stu[],int len);STU *moveStu1ToStu2ByScore(STU **stu1,int len,int score);//将成绩大于score的学生信息,从stu1中转移到stu2中,返回stu2首地址int count;//大于指定分数的学生int main(){ STU *stu1=NULL,*stu2=NULL; int i,se; stu1=(STU *)calloc(stuNum,sizeof(STU)); printf("输入%d个学生的学号及成绩到数组1:\n",stuNum); for(i=0;i
<stunum;i++) scanf("%d%d",&stu1[i].id,&stu1[i].score); printf("数组1的学生信息:\n"); printfstu(stu1,stunum); printf("输入要转移的学生分界成绩(大于该成绩):"); scanf("%d",&se); stu2="moveStu1ToStu2ByScore(&stu1,stuNum,se);" printfstu(stu1,stunum-count); printf("数组2的学生信息:\n"); printfstu(stu2,count); return 0;}stu *movestu1tostu2byscore(stu **stu1,int len,int score){ int i,j="0,k=0;" count="0;" stu *stusave="NULL,*stu2=NULL;" for(i="0;i
score) count++; stuSave=(STU *)calloc(stuNum-count,sizeof(STU)); stu2=(STU *)calloc(count,sizeof(STU)); for(i=0;i
score) stu2[j++]=(*stu1)[i]; else stuSave[k++]=(*stu1)[i]; free(*stu1); *stu1=stuSave; return stu2;}void printfStu(STU stu[],int len)//打印学生结构数组{ int i; printf("学号 成绩:\n"); for(i=0;i
<len;i++) printf("%d %d\n",stu[i].id,stu[i].score);}
C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义。如: struct st { int x,y; char str[10];};struct st *array ;int n;printf("input n: "); scanf("%d", &n);array=(struct st*)malloc(n*si...
1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
注意:结构数组的成员也可以是数组变量。
C语言结构体数组的定义是什么?
struct student
{ char stuno[10];//学号一般比较长,用字符数组存放。
char name[10];//存放姓名
float score[2];//数组中存放2门课的成绩;
float sum;//存放总分
float aver;//存放平均成绩
}stu[5]; //结构体数组,能表示5个同学各自的信息
#include
struct student
{
int num;
char name[20];
float score1,score2,sum,average;
};
void main()
{
struct student stu[5];
int i;
for(i=0;i<5;i++)
{
printf("请依次输入第%d个学生的学号,姓名,和两门成绩:",i+1);
scanf("%d%s%f%f",&stu[i].num,stu[i].name,&stu[i].score1,&stu[i].score2);
stu[i].sum=stu[i].score1+stu[i].score2;
stu[i].average=stu[i].sum/2;
}
printf("学号 姓名 成绩 总成绩 平均成绩\n");
for(i=0;i<5;i++)
printf("%d %s %.2f %.2f %.2f
%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sum,stu[i].average);
}
结构数组就是具有相同结构类型的变量集合。
假如要定义一个班级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]
结构体数组怎么使用
01定义结构体数组
1、一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。
2、结构体数组与之前介绍的数值型数组的不同之处在于每个数组元素都是一个结构体类型的数据,他们都包括各个成员项。
3、定义结构体数组一般形式
(1)struct 结构体名
{成员表列}数组名[数组长度];
(2)先声明一个结构体类型(如struct Person),然后再用此类型定义结构体数组:结构体类型 数组名[数组长度];
4、对结构体数组初始化的形式是在定义数组的后面加上:={初值表列};
5、在定义结构体数组时进行初始化,为清晰起见,将每个学生的信息用一对花括号包起来,这样做,阅读和检查比较方便,尤其当数据量多时,这样是有好处的。
结构体数组的定义和引用(一)
单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出
现。结构体类型数组的定义形式为:
struct stu / *定义学生结构体类型* /
{
char name[20]; / *学生姓名* /
char sex; / *性别* /
long num; / *学号* /
float score[3]; / *三科考试成绩* /
};
struct stu stud[20]; 定/*义结构体类型数组stud ,*/
/ *该数组有2 0个结构体类型元素* /
其数组元素各成员的引用形式为:
stud[0].name、stud[0].sex、stud[0].score[i];
stud[1].name、stud[1].sex、stud[1].score[i];
...
...
stud[19].name、stud[19].sex、stud[19].score[i];
[例7-1]设某组有4个人,填写如下的登记表,除姓名、学号外,还有三科成绩,编程实现对表格的计算,求解出每个人的三科平均成绩,求出四个学生的单科平均,并按平均成绩由高分到低分输出。
题目要求的问题多,采用模块化编程方式,将问题进行分解如下:
1) 结构体类型数组的输入。
2) 求解各学生的三科平均成绩。
3) 按学生的平均成绩排序。
4) 按表格要求输出。
5) 求解组内学生单科平均成绩并输出。
6) 定义m a i n ( )函数,调用各子程序。
第一步,根据具体情况定义结构体类型。
struct stu
{
char name[20]; /*姓名* /
long number; /*学号* /
float score[4]; /* 数组依此存放E n g l i s h 、M a t h e m a 、P h y s i c s ,及A v e r a g e * /
} ;
由于该结构体类型会提供给每个子程序使用,是共用的,所以将其定义为外部的结构体
类型,放在程序的最前面。
第二步,定义结构体类型数组的输入模块。
void input(arr,n) /*输入结构体类型数组a r r 的n个元素* /
struct stu arr[];
int n;
{ int i,j;
char temp[30];
for (i=0;i{
printf("\ninput name,number,English,mathema,physic\n"); /*打印提示信息* /
gets(arr[i].name); /输*入姓名*/
gets(temp); /输*入学号*/
a r r [ i ] . n u m b e r = a t o l ( t e m p ) ;
f o r ( j = 0 ; j < 3 ; j + + )
{
gets(temp); /*输入三科成绩* /
a r r [ i ] . s c o r e [ j ] = a t o i ( t e m p ) ;
} ;
}
}
结构体数组和数组有什么区别?
1、定义上的区别:
数组是同类型数据的集合;结构体可以是同类型也可以是不同类型数据的集合。
举例如下:
int a[5]; // 数组a的5个元素都是int类型
struct stu
{
int num;
char name[5];
float score;
}std; // 结构体std的三个成员分别是int型、char型和float型,数据类型不同。
2、调用时候的区别
数据是直接用形如“数组名[下标]”的方式调用,如a[3],表示数组a的第4个元素(数组下标从0开始);
结构体是用结构体成员运算符来调用的,如:std.num,表示调用结构体std中的num变量。
结构体类型的数组
一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。 定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可。如{ int num;char name[20];char sex;int age;float score;char addr[30];};Student stu[3];//定义Student类型的数组stu也可以直接定义一个结构体数组,如struct Student{ int num;char name[20];char sex;int age;float score;char addr[30];}stu[3];或struct{ int num;char name[20];char sex;int age;float score;char addr[30];}stu[3]; 结构体数组的初始化与其他类型的数组一样,对结构体数组可以初始化。如struct Student{int num;char name[20];char sex;int age;float score;char addr[30];}stu[3]={{10101,″Li Lin″, ′M′, 18,87.5, ″103 Beijing Road″},{10102,″Zhang Fun″,′M′,19,99, ″130 Shanghai Road″},{10104,″Wang Min″,′F′, 20,78.5, ″1010 Zhongshan Road″}}; 定义数组stu时,也可以不指定元素个数,即写成以下形式:stu[ ]={{…},{…},{…}};编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。一个结构体常量应包括结构体中全部成员的值。当然,数组的初始化也可以用以下形式:Student stu[ ]={{…},{…},{…}};//已事先声明了结构体类型Student由上可以看到,结构体数组初始化的一般形式是在所定义的数组名的后面加上 ={初值表列}; 下面举一个简单的例子来说明结构体数组的定义和引用。例7.2对候选人得票的统计程序。设有3个候选人,最终只能有1人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。可以定义一个候选人结构体数组,包括3个元素,在每个元素中存放有关的数据。 程序如下:#include
struct Person//声明结构体类型Person{char name[20];int count;}Person leader[3]={″Li″,0,″Zhang″,0,″Fun″,0};//定义Person类型的数组,内容为3个候选人的姓名和当前的得票数int main( ){int i,j;char leader_name[20];//leader_name为投票人所选的人的姓名for(i=0;i<10;i++) {cin>>leader_name;//先后输入10张票上所写的姓名for(j=0;j<3;j++)//将票上姓名与3个候选人的姓名比较if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;//如果与某一候选人的姓名相同,就给他加一票}cout<
<endl;for(i=0;i<3;i++) 输出3个候选人的姓名与最后得票数{cout<<leader[i].name<<″:″<<leader[i].count<<endl;}return 0;}运行情况如下:zhang↙ (每次输入一个候选人的姓名)li↙fun↙li↙zhang↙li↙zhang↙li↙fun↙wang↙li:4 (输出3个候选人的姓名与最后得票数)zhang:3fun:2 程序定义一个全局的结构体数组leader,它有3个元素,每一元素包含两个成员,即name(姓名)和count(得票数)。在定义数组时使之初始化,使3位候选人的票数都先置零。在这个例子中,也可以不用字符数组而用string方法的字符串变量来存放姓名数据,程序可修改如下:#include
#include
using namespace std;struct Person{string name;//成员name为字符串变量int count;};int main( ){Person leader[3]={″Li″,0,″Zhang″,0,″Fun″,0};int i,j;string leader_name;// leader_name为字符串变量for(i=0;i<10;i++){cin>>leader_name;for(j=0;j<3;j++)if(leader_name==leader[j].name) leader[j].count++//用“==”进行比较}cout<
<endl;for(i=0;i<3;i++){cout<<leader[i].name<<″:″<<leader[i].count<<endl;}return 0;}
</endl;for(i=0;i<3;i++){cout<<leader[i].name<<″:″<<leader[i].count<
</endl;for(i=0;i
汇编语言程序中 结构体数组的定义调用方法,尤其是数组的角标(例structa[])中括号里想用变量表示
struct 结构体名
{
结构体内容;
}structa[5];
structa[5]={{},{},{},{},{}};
数组的角标只能用常量表示,这是C语言的一个语法规则
汇编中不能直接通过[]和索引访问数组元素。可以通过偏移地址进行访问。
汇编中有结构体,可以按照下面的方法定义
stu Struc
xName DB 10 DUP(?);name 10bytes 0
xClass db 0;class 1byte 10
xId DB 0 ;id 1byte 11
xScore dw 0;score 2byte 12
stu ends