目录

一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy)

二、对数组整体进行赋值。(一次性需要把所有的都添加进去,不需要strcpy)

(1) 在声明数组的时候,进行赋值

(2)对有规律的数据赋值,比如学生结构体的学号是有规律的。

三、使用输入进行赋值

(1)直接使用for,配合动态分配内存,这里按照数据库的数据类型,我将学号定义为char型,实际上定义为int 即可。

(2)调用函数赋值,我们知道,结构体数组中,数组有多个元素,每个数组元素又有多个结构体成员变量,所以将每个数组元素用函数分别去赋值。

(3)通过指针给到其他函数去赋值(如果你看到这,才到了精髓,传参赋值)


一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy)

这里使用了一个Init函数,为了在进一步说明传参的使用。实际上赋值按照需要放在主函数就行。

(使用strcpy函数需要添加头文件string.h)

 #include <stdio.h>#include <string.h>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].date.year = 2021; //使用级联运算 name[0].date.mouth = 11;name[0].date.day = 11;strcpy(name[0].activity,"Taobao shooping");strcpy(name[1].name,"Amy");name[1].date.year=2021;name[1].date.mouth = 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].date.year,name[i].date.mouth,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)调用函数赋值,我们知道,结构体数组中,数组有多个元素,每个数组元素又有多个结构体成员变量,所以将每个数组元素用函数分别去赋值。

#include <stdio.h>
#include <stdlib.h>typedef struct student {  //定义结构体 char sno[6];         //注意学号为char char name[20];
} stu;stu getstu(void)         //结构体函数
{stu tem;scanf("%s",tem.sno);//因为是字符串,不用加取址符&,否则此处为&p.xscanf("%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)通过指针给到其他函数去赋值(如果你看到这,才到了精髓,传参赋值)

#include <stdio.h>
#include <stdlib.h>typedef struct student {  //定义结构体 char sno[6];         //注意学号为char char name[20];
} stu;void getstu(stu *stua)         //返回值为空即可
{scanf("%s",stua -> sno);//因为是字符串,不用加取址符&,否则此处为&stua.xscanf("%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);}
}

执行结果:

以上就是赋值的几种方式,我认为我把全部的方式都写全了,收藏一下吧。 (如有不足,请留言,你的留言对我是极大的鼓励)

结构体数组的赋值方法(常用的三种,包含字符串)相关推荐

  1. c语言如何为结构数组赋值,C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include struct student { int a; int b ; int c ; }; stru ...

  2. C语言的几种结构体Struct的赋值方法

    C语言的几种结构体Struct的赋值方法 1. 定义结构体类型 这里是两个结构体的基本结构. struct Init{int a;float b;double c; }I1; struct SIMPL ...

  3. c语言 结构体数组的赋值

    c语言 结构体数组的赋值 //**创建结构体** #include<stdio.h> struct Class{int id;char name[10]; }; //******结构体数组 ...

  4. 关于结构体数组的赋值问题

    最近在练习PAT的题目,有很多字符串数据需要使用二维字符串数组进行存储,处理起来并不是很方便,如果要存储的数据每一行都是规格化的,可以考虑使用一维的结构体数组来处理,以下为一维的结构体数组的使用总结: ...

  5. C++ 结构体指针与结构体数组的赋值

    知识点小结: 当需要批量赋值结构体的时候,可以使用结构体数组.对于结构体指针,可以用来指向结构体数组的首地址,但是不能按照结构体数组的赋值方式进行赋值,感觉是无法预知后面批量赋值的大小.具体情况见以下 ...

  6. 向结构体或结构体数组中赋值

    一:结构体 方式1 #include<bits/stdc++.h> using namespace std;struct Node{string name;int grade; };int ...

  7. 创建结构体数组保存5名学生的成绩单(每人包含3门课程成绩),计算每人成绩的总分,并打印出总分的最高分...

    在 C 语言中,可以使用如下的代码来创建结构体数组并保存学生的成绩单: #define N 5 #define M 3struct student {int id;char name[20];int ...

  8. C++遍历结构体数组并赋值

    main.cpp #include <iostream>using namespace std;#include "student.h"int main() {Stud ...

  9. Matlab 结构体数组批量赋值

    老实说,不是很懂,但确实可以用 代码 clear;clc; Cncs=struct('past_time', {1,1,1,1,1,1,1,1}); [Cncs.past_time] A = mat2 ...

最新文章

  1. python【数据结构与算法】完全背包(附代码)
  2. java(4)——数据类型中的数值型的浮点数
  3. Taylor Swift -《Fearless》
  4. SpringBoot 配置错误页
  5. spring ioc原理解析
  6. 【FHQ treap】维护书架(金牌导航 无旋式treap-1)
  7. Xenix — 微软与UNIX的短暂爱恋
  8. 使用xtrabackup(innobackupex)实现MySQL的热备
  9. python基础(17)之 JSON
  10. XLNet(Generalized Autoregressive Pretraining for Language Understanding) 论文笔记
  11. 0.3:Before We Start
  12. 百度地图删除地图上所有的标注和所有的覆盖物
  13. Mysql登录时出现Access denied for user ‘root‘@‘localhost‘ (using password YES)无法打开的解决方法
  14. elementui表单校验原始密码_玩转表单交互,提升用户体验
  15. 基于51的光立方制作
  16. 怎么SSH远程连接云服务器
  17. linux系统下安装搜狗输入法,搜狗拼音输入法 For Linux安装方法全程图解
  18. redux的原理、工作流程及其应用
  19. node 爬虫 实战 - 爬取拉勾网职位数据
  20. angr入门之CLE

热门文章

  1. python爬虫篇4——爬取专利著作权信息
  2. Markdown 简易入门教程
  3. 各代码三元运算符表达式实用技巧分享
  4. 微信小程序商城 java后台
  5. Word2000 的命令ID,识货的进
  6. 设计模式六: 模板方法(Template Method)
  7. 游戏行业人才结构分析
  8. vue2.0---目录结构
  9. 解决GitLab Push master to origin/master was rejected by remote问题
  10. 开发www.miibeian.gov.cn的JAVAEE大师 -- I 服了油