C语言结构体数组常用的赋值方法有哪些

蜗牛 互联网技术资讯 2022-06-14 26 0

这篇“C语言结构体数组常用的赋值方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言结构体数组常用的赋值方法有哪些”文章吧。

    一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要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"};

    输出结果:

    C语言结构体数组常用的赋值方法有哪些  c语言 第1张

    这里举了个例子,定义了一维数组name,将name传到被调函数的时候,只剩下了首地址,对其进行赋值是[Error] declaration of 'sch name' shadows a parameter  ,就是说缺少参数,因为只有首地址,并不是完整的数组,所以不能这么赋值。

    C语言结构体数组常用的赋值方法有哪些  c语言 第2张

    (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);
    	 } 
    }

    输出结果:

    C语言结构体数组常用的赋值方法有哪些  c语言 第3张

    (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.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);
    	 } 
    }

     输出结果:

    C语言结构体数组常用的赋值方法有哪些  c语言 第4张

    (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.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);
    	 } 
    }

    执行结果:

    C语言结构体数组常用的赋值方法有哪些  c语言 第5张

    以上就是关于“C语言结构体数组常用的赋值方法有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注蜗牛博客行业资讯频道。

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    评论