结构体数组的赋值⽅法(常⽤的三种,包含字符串)⽬录
⼀、按照成员变量进⾏赋值(⿇烦,好理解,字符串赋值需要strcpy)
这⾥使⽤了⼀个Init函数,为了在进⼀步说明传参的使⽤。实际上赋值按照需要放在主函数就⾏。
(使⽤strcpy函数需要添加头⽂件string.h)
#include <stdio.h>
#include <string.h>
typedef struct date  //定义了⼀个⽇期结构体,包含年⽉⽇三个成员
数组全部赋值为1{
int year;
int mouth;
int day;
}datea;
typedef struct  schedule//定义了⼀个⽇程结构体,包含⽇期,和活动两个成员变量
{
char name[10];
datea date;
char activity[200];
}sch;
int Init(sch *name)  //初始化函数数组⽤指针接收
{
strcpy(name[0].name,"jack");
name[0].ar = 2021; //使⽤级联运算
name[0].uth = 11;
name[0].date.day = 11;
strcpy(name[0].activity,"Taobao shooping");
strcpy(name[1].name,"Amy");
name[1].ar=2021;
name[1].uth = 11;
name[1].date.day = 12;
strcpy(name[1].activity,"play piano");
}
int main()
{
sch name[2] ;
Init(name);
for(int i=0;i<2;i++)
{
printf("%s %d %d %d \n%s \n",name[i].name,name[i].ar,name[i].uth,name[i].date.day,name[i].activity);
}
}
⼆、对数组整体进⾏赋值。(⼀次性需要把所有的都添加进去,不需要strcpy)(1)在声明数组的时候,进⾏赋值
可以换⾏,中间的结构体嵌套需要再次使⽤花括号括起来(这⾥没有传参,放在被调函数不能这么赋值)。
sch name[2] = {{"jack",{2021,11,11},"Taobao Shopping"},
{"jack",{2021,11,11},"Taobao Shopping"}};
也可以直接写下去:
typedef struct student {
int sno;
char name[20];
} stu;
int main() {
stu stua[5] = {1001,"jack",1002,"Amy"};
输出结果:
这⾥举了个例⼦,定义了⼀维数组name,将name传到被调函数的时候,只剩下了⾸地址,对其进⾏赋值是[Error] declaration of 'sch name' shadows a parameter  ,就是说缺少参数,因为只有⾸地址,并不是完整的数组,所以不能这么赋值。
(2)对有规律的数据赋值,⽐如学⽣结构体的学号是有规律的。
#include <stdio.h>
typedef struct student  //定义了学⽣结构体
{
int sno;
char name ;
}stu;
stu stua[5];  //5名学⽣的结构体数组
int main()
{
for(int i=1;i<5;i++)
{
stua[i].sno=i;  //循环赋值,5名学⽣的学号依次为1-5
}
return 0;
}
三、使⽤输⼊进⾏赋值
依然⽤学⽣为例⼦。
(1)直接使⽤for,配合动态分配内存,这⾥按照数据库的数据类型,我将学号定义为char型,实际上定义为int 即可。
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
char sno[6];
char name[20];
} stu;
int main()
{
int N;
scanf("%d",&N);//获得学⽣个数
stu * stua = (stu *)malloc(N * sizeof(stua));  //动态分配了结构体变量stua的长度
//⽅法⼀:⽤for给结构体赋值
for(int i=0;i<N;i++)
{
scanf("%s %s",stua[i].sno,stua[i].name);
}
for(int i=0;i<N;i++)
{
printf("%s %s\n",stua[i].sno,stua[i].name);
}
}
输出结果:
(2)调⽤函数赋值,我们知道,结构体数组中,数组有多个元素,每个数组元素⼜有多个结构体成员变量,所以将每个数组元素⽤函数分别去赋值。
char sno[6];        //注意学号为char
char name[20];
} stu;
stu getstu(void)        //结构体函数
{
stu tem;
scanf("%s",tem.sno);//因为是字符串,不⽤加取址符&,否则此处为&p.x
scanf("%s",tem.name);
return tem;
}
int main()
{
int N;
scanf("%d",&N);//获得学⽣个数
stu * stua = (stu *)malloc(N * sizeof(stua));  //动态分配了结构体变量stua的长度
//⽅法⼆:调⽤函数
for(int i=0;i<N;i++)
{
stua[i] = getstu();
}
for(int i=0;i<N;i++)
{
printf("%s %s\n",stua[i].sno,stua[i].name);
}
}
输出结果:
(3)通过指针给到其他函数去赋值(如果你看到这,才到了精髓,传参赋值)
char sno[6];        //注意学号为char
char name[20];
} stu;
void getstu(stu *stua)        //返回值为空即可
{
scanf("%s",stua -> sno);//因为是字符串,不⽤加取址符&,否则此处为&stua.x
scanf("%s",stua -> name);
}
int main()
{
int N;
scanf("%d",&N);//获得学⽣个数
stu * stua = (stu *)malloc(N * sizeof(stua));  //动态分配了结构体变量stua的长度
//⽅法⼆:函数传参赋值
for(int i=0;i<N;i++)
{
getstu(&stua[i]);
}
for(int i=0;i<N;i++)
{
printf("%s %s\n",stua[i].sno,stua[i].name);
}
}
执⾏结果:
以上就是赋值的⼏种⽅式,我认为我把全部的⽅式都写全了,收藏⼀下吧。 (如有不⾜,请留⾔,你的留⾔对我是极⼤的⿎励)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。