- 里论外几
-
所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。
struct 结构体类型名{类型名 成员名;类型名 成员名;……},先声明结构体类型,再定义结构体变量名。声明结构体类型,不分配空间,定义结构体类型变量,就要分配内存空间。
扩展资料:
结构体数组指针类型:
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址,指针变量也可以用来指向结构体数组中的元素。
1、类型一:
指向结构体变量的指针引用结构体变量中的成员。
2、类型二:
用结构体变量和指向结构体变量的指针构成链表,链表是一种常见的重要的数据结构。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。
链表中的每一个元素称为“结点”,每个结点都应包括两个部分:
一是用户需要用的实际数据,
二是下一个结点的地址。
链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。这种链表的数据结构,必须利用结构体变量和指针才能实现。
可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。
参考资料来源:百度百科—结构体类型—数组
- LuckySXyd
-
#include<stdio.h>
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("学号 姓名 成绩 总成绩 平均成绩 ");
for(i=0;i<5;i++)
printf("%d %s %.2f %.2f %.2f
%.2f ",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sum,stu[i].average);
}
- 南yi
-
第二个struct student是定义了一个student结构体,这个明白吧。
第一个是用typedef把struct student这个结构体类型名字重新定义为student,也就是说struct student和student表示同一个事物,都是一个类型的标识符,比如 typedef int zhengshu; 就是你把整型int重命名为zhengshu,下面定义:int i; 和 zhengshu i; 两句就是等价的了
- 豆豆staR
-
1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
注意:结构数组的成员也可以是数组变量。
- cloudcone
-
struct student
{ char stuno[10];//学号一般比较长,用字符数组存放。
char name[10];//存放姓名
float score[2];//数组中存放2门课的成绩;
float sum;//存放总分
float aver;//存放平均成绩
}stu[5]; //结构体数组,能表示5个同学各自的信息
- Chen
-
struct在C语言中是一个关键字,用于定义结构数据类型。
问题中的两种定义的区别在于第一种是给student数据类型,重新定义了一个类型别名,而第二种则单纯的表示一种叫做student的数据结构类型。两者的主要区别在于后面直接定义变量时。如下代码,则可以直接在结构体后面定义一个zhang_san的结构体变量。
12345
struct student{int num;struct student *next;}zhang_san;
而第一种的定义,则会出现错误。
12345
typedef struct student{ int num; struct student *next;}student zhang_san;
扩展:
“结构”是一种构造数据类型,现在一般叫做用户自定义数据类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。
定义一个结构的一般形式为:
1234
struct结构名{//成员表列};
成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:
1234567
struct stu{ int num; char name[20]; char sex; float score;};
在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。
- snjk
-
1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
- FinCloud
-
第一种是定义一个结构体并取个student结构体名,下次定义结构体是:
只要:student <标识符>; 乳student stu;
而第二种:必须这样定义:struct student stu;
- 皮皮
-
首先需要弄清typedef的作用:
int a; //首先定义一个int型的变量a
typedef a my_int; //typedef 的作用是声明一种新的数据类型,该数据类型和变量a所属的类型一样。
my_int b; //然后就可以使用typedef声明的新的数据类型my_int来定义新的变量b,此时b就是my_int类型也就是int类型
struct LNode
{
char data;
struct LNode *next;
}
上面这个结构体定义应该很熟悉,就是定义了一个LNode的结构体变量,可以类似于上面的变量a。这里我们把struct LNode结构体变量替换为变量a,所以你的结构体变为:
typedef a LNode,*LinkList
上面的代码等价于下面两行:
typedef a LNode; //定义LNode是一种struct LNode的数据类型,比如:LNode my_struct;
typedef a *LinkList; //定义了一种指向LNode数据类型的指针类型LinkList,比如:LinkList my_point;
- LocCloud
-
代码仅供参考:
#include "stdio.h"
#include "conio.h"
struct books
{
char *name;
char *press;
char *author;
float price;
};
struct books lib[]={{"C language","UESTC","Zhuang San",12.50},{"PASCAL","UESTC","Li Si",10.00},{"English Reading","UESTC","Wang wu",8.00},{"########","#####","######",0}};//由于篇幅有限,这里只给出三本书的信息
main()
{
find();
printf("Press any key continue... ");
getch();
}
//图书查询子函数
find()
{
struct books *p;
char sm[100];
int i=0;
p=&lib[i];
printf("Please input the name of books: ");
gets(sm);
printf("The information of the books: ");
while(p->price!=0)//用p->price成员的值控制循环
{
if(strcmp(p->name,sm)==0)
{
printf("%18s%8s%8s%7.2f ",p->name,p->author,p->press,p->price);
break;//当字符比较函数值为0,表明该书已找到,打印并跳出循环
}
i++;//否则将下标加1移向下一元素
p=&lib[i];//让指针再指向这一元素后继续查找
}
if(p->price==0)//p->price=0,表明整个书库都已查完并没有找到所要的书
printf("Sorry ! Your inquires the book was not found. ");
}
- 余辉
-
这段程序意思是定义一个LNode类的结构体,后面的LNode是结构体变量,LinkList是结构体指针。里面的struct LNode *next是定义指向LNode结构体的指针域,说明LNode结构体里面结点一共两个域一个数据域,一个指针域。}后面的LNode可以去掉,可以在其他地方声明结构体变量。
- 小菜G
-
#include "stdio.h"
#include "string.h"
#define N 50
struct infoma{
char fname[N];
char lname[N];
int allwd;
};
struct infoma funname(struct infoma namet)
{
printf("please putin you first name: ");
gets(namet.fname);
printf("please putin you last name: ");
gets(namet.lname);
return namet;
}
struct infoma allname(struct infoma namet)
{
namet.allwd=strlen(namet.fname)+strlen(namet.lname);
return namet;
}
void putout(struct infoma namet)
{
printf("%s %s,your name have %d words ",namet.lname,namet.fname,namet.allwd);
}
main()
{
struct infoma guy;
guy=funname(guy);
guy=allname(guy);
putout(guy);
}