C语言结构体数组的定义

Python015

C语言结构体数组的定义,第1张

所谓结构数组,是指数组中的每个元素都是一个结构体。在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。

结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。

struct 结构体类型名{类型名 成员名;类型名 成员名;……},先声明结构体类型,再定义结构体变量名。声明结构体类型,不分配空间,定义结构体类型变量,就要分配内存空间。

扩展资料:

结构体数组指针类型:

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

1、类型一:

指向结构体变量的指针引用结构体变量中的成员。

2、类型二:

用结构体变量和指向结构体变量的指针构成链表,链表是一种常见的重要的数据结构。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。

链表中的每一个元素称为“结点”,每个结点都应包括两个部分:

一是用户需要用的实际数据,

二是下一个结点的地址。

链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。这种链表的数据结构,必须利用结构体变量和指针才能实现。

可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。

参考资料来源:百度百科—结构体类型—数组

结构数组就是具有相同结构类型的变量集合。

假如要定义一个班级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]

intmain(void){

structstudentsbao={}

printf("%d,%s\n",bao.id,bao.name)//输出是4224528,空(应该是null)

//structstudentsbao={3,"123"}可以。第一种赋值方法

//strcpy(bao.name,"bao")//可以,

//printf("%d,%s\n",bao.id,bao.name)

//bao.name="bao"错误“stray'\351'inprogram”其他是乱码,

//bao.name[0]='a'

//bao.name[0]='/0'

//printf("%d,%s\n",bao.id,bao.name)

/*这样可以,*/

//chararr[10]="baobao"

////bao.name=arr//error"assignmenttoexpressionwitharraytype"

//scanf("%s",bao.name)//可以,

//printf("%d,%s\n",bao.id,bao.name)

//所以scanf那一类函数都可以。

//还有就是memcpy函数也是可以的

return0

}

扩展资料

C语言结构体数组的直接赋值及数组的长度计算:

#include<stdio.h>

//自定义一个字符串的结构体,包含字符串和字符串长度两个变量

typedefstructStr{

charch[100]

intlength//char数组(字符串)的长度

}myStr

//刚开始声明变量时每个变量的字符串长度length都为0

//这里以长度为10的数组为例,数组长度是1000

//对第0个到第9个结构体数组的长度同时赋值为0

myStrmyStr1[10]={

[0...9]={

.length=0,

}

}

intmain(){

inti

for(i=0i<10i++){

printf("%d\n",myStr1[i].length)

}

return0

}