目录
一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy)
二、对数组整体进行赋值。(一次性需要把所有的都添加进去,不需要strcpy)
(1) 在声明数组的时候,进行赋值
(2)对有规律的数据赋值,比如学生结构体的学号是有规律的。
三、使用输入进行赋值
(1)直接使用for,配合动态分配内存,这里按照数据库的数据类型,我将学号定义为char型,实际上定义为int 即可。
(2)调用函数赋值,我们知道,结构体数组中,数组有多个元素,每个数组元素又有多个结构体成员变量,所以将每个数组元素用函数分别去赋值。
(3)通过指针给到其他函数去赋值(如果你看到这,才到了精髓,传参赋值)
一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy)
这里使用了一个Init函数,为了在进一步说明传参的使用。实际上赋值按照需要放在主函数就行。
(使用strcpy函数需要添加头文件)
#include <>
#include <>
typedef struct date //定义了一个日期结构体,包含年月日三个成员
{
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]. = 2021; //使用级联运算
name[0]. = 11;
name[0]. = 11;
strcpy(name[0].activity,"Taobao shooping");
strcpy(name[1].name,"Amy");
name[1].=2021;
name[1]. = 11;
name[1]. = 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].,name[i].,name[i].,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 <>
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 <>
#include <>
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)调用函数赋值,我们知道,结构体数组中,数组有多个元素,每个数组元素又有多个结构体成员变量,所以将每个数组元素用函数分别去赋值。
#include <>
#include <>
typedef struct student { //定义结构体
char sno[6]; //注意学号为char
char name[20];
} stu;
stu getstu(void) //结构体函数
{
stu tem;
scanf("%s",);//因为是字符串,不用加取址符&,否则此处为&
scanf("%s",);
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)通过指针给到其他函数去赋值(如果你看到这,才到了精髓,传参赋值)
#include <>
#include <>
typedef struct student { //定义结构体
char sno[6]; //注意学号为char
char name[20];
} stu;
void getstu(stu *stua) //返回值为空即可
{
scanf("%s",stua -> sno);//因为是字符串,不用加取址符&,否则此处为&
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);
}
}
执行结果:
以上就是赋值的几种方式,我认为我把全部的方式都写全了,收藏一下吧。 (如有不足,请留言,你的留言对我是极大的鼓励)