C语言中的结构体数组

C语言中的结构体数组

1.结构体 数组概念
2. 结构体数组定义和初始化
3. 结构体数组的引用

结构体数组的概念

元素为结构体类型的数组称为结构体数组,在实际的应用过程中,经常使用结构体数组来表示具有相同数据结构的一个群体

struct student{
    int xh;
    char *name;
    char *sex;
}stu[20];
定义了一个结构体数组stu,共有30个元素,stu[0]--stu[29];
每个数组的元素都是struct student类型
结构体数组定义和初始化

1:先声明结构体,再去定义结构体数组

struct 结构体名{
    成员列表;
};
struct 结构体名 数组名[长度] = {{成员值列表},...{成员值列表}};
struct 结构体名 数组名[长度] = {结构体变量1,...,结构体变量n};

2:声明结构体的同时去定义结构体数组(结构体名可以省略);

struct [结构体名]
{
    成员列表;
}数组名[长度] ={{成员值列表}...{成员值列表}};  
结构体数组的引用
结构体数组名[下标].成员名
通过下表可以获得结构体数组中指定的结构体变量,然后再通过点运算符,可以获得结构体变量中的成员
如:
    struct student{
        int  xh;
        char name[];
    }stu[4];
    strcpy(stu[0].name,"Tom");
    stu[1].xh = 1;

下面是对应的结构体数组的实际操作代码:

#include<stdio.h>
#include<stdlib.h>

//结构体中声明中尽量使用字符指针进行字符串操作,在初始化的时候会方便
//如果使用的是字符数组,那么会就要使用strcpy进行拷贝初始化
struct address{
    char *country;
    char *city;
};

struct teacher{
    char *name;
    int age;
    struct address addr;
};

void out_teacher(struct teacher tea);

void out_all_teachers(struct teacher [],int num);

int main(int argc,char *argv[]){
    //先定义结构体变量,再进行定义结构体数组
    struct teacher teacher_one = {"zhangsan",20,{"china","shanghai"}};
    struct teacher teacher_two = {"lisi",25,{"china","hefei"}};
    struct teacher teachers_one [] = {teacher_one,teacher_two};
    out_all_teachers(teachers_one,2);
    printf("-----------------------------\n");
    //在定义结构体数组的时候,直接进行结构体数组的初始化工作
    struct teacher  teachers_two [] = {{"wangwu",30,{"china","tianjin"}},{"zhaoliu",40,{"china","jiaozuo"}},{"tianqi",50,{"china","shenzhen"}}};
    out_all_teachers(teachers_two,3);

    return 0;
}

void out_teacher(struct teacher tea){
    printf("name:%s",tea.name);
    printf("age:%d\n",tea.age);
    printf("country:%s\n",tea.addr.country);
    printf("city:%s\n",tea.addr.city);
}

void out_all_teachers(struct teacher teachers[],int num){
    int i = 0;
    for(i = 0; i < num ; i++){
        out_teacher(teachers[i]);
        printf("======================\n");
    }   
}

代码能够run,如果有需要的话,可以直接拉下来run一下,看看结构体数组是怎么进行初始化操作和使用的。谢谢大家的访问,如有写的不好的地方,希望大家能够及时的提出来,谢谢观看

回答: 数组是多个相同类型数据的组合,用于实现对这些数据的统一管理。在Java,数组可以包含任何数据类型,包括基本类型和引用类型。数组的下标从0开始,必须在指定范围内使用,否则会报下标越界异常。数组的赋值机制有两种情况,对于基本数据类型,赋的值是具体的数据,相互之间不影响;对于数组,默认情况下是引用传递,赋的值是地址。\[2\] 在解决LeetCode问题,可以使用数组来存储和操作数据。例如,在解决两数之和问题时,可以使用HashMap来存储数组元素和对应的下标,然后遍历数组,判断目标值减去当前元素是否在HashMap存在,如果存在,则返回对应的下标。这样可以在O(n)的时间复杂度内解决问题。\[1\] 在解决移除元素问题时,可以使用双指针的方法。定义一个慢指针和一个快指针,快指针用于遍历数组,慢指针用于指向不需要移除的元素。当快指针指向的元素不需要移除时,将其赋值给慢指针指向的位置,并将慢指针向后移动一位。最后返回慢指针的位置即可。这样可以在O(n)的时间复杂度内解决问题。\[3\] #### 引用[.reference_title] - *1* *2* [Java数据结构----数组](https://blog.csdn.net/automation666/article/details/130348201)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java-数据结构-数组](https://blog.csdn.net/weixin_45532984/article/details/125867222)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值