把结构体与数组之间的转换

二维数组和一维数组的转换很简单,直接是强制转换即可,例如:

#include<stdio.h>
#include<string.h>
unsigned char aa[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

int main(){
    int i;

    for(i = 0;i < 16;i++){
        printf("%d ",((unsigned char *)aa)[i]);
    }

}

打印结果:

如果是定义一个结构体呢:

struct cc
{
    unsigned char data1[6];
    unsigned char data2;
    unsigned char data3;
    unsigned char data4[31];
};

main函数里面定义变量初始化

 

    struct cc dd = {
        .data1 = {1,2,3,4,5,6},
        .data2 = 7,
        .data3 = 8,
        .data4 = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1}
        
    };

    for(i = 0;i < 39;i++){
        printf("%d ",((unsigned char *)&dd)[i]);
    }

打印结果:

如果是结构体里面套结构体呢?

下面给一个完整可以运行的程序:

#include<stdio.h>
#include<string.h>
unsigned char aa[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
struct cc
{
    unsigned char data1[6];
    unsigned char data2;
    unsigned char data3;
    unsigned char data4[31];
};
struct ee{
    struct cc ff[4];    
};
int main(){
    int i;
    struct cc dd = {
        .data1 = {1,2,3,4,5,6},
        .data2 = 7,
        .data3 = 8,
        .data4 = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1}
        
    };
    struct ee bb = {
        .ff = {
                {    
                    .data1 = {1,2,3,4,5,6},
                    .data2 = 7,
                    .data3 = 8,
                    .data4 = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1}
                },
                {    .data1 = {1,2,3,4,5,6},
                    .data2 = 7,
                    .data3 = 8,
                    .data4 = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1}
                },
                {        
                    .data1 = {1,2,3,4,5,6},
                    .data2 = 7,
                    .data3 = 8,
                    .data4 = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1}
                },
                {        
                    .data1 = {1,2,3,4,5,6},
                    .data2 = 7,
                    .data3 = 8,
                    .data4 = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1}
                }
        }
    };
    
    
    for(i = 0;i < 16;i++){
        printf("%d ",((unsigned char *)aa)[i]);
    }
    printf("\n\n");
    for(i = 0;i < 39;i++){
        printf("%d ",((unsigned char *)&dd)[i]);
    }
    
    printf("\n\n");
    for(i = 0;i < 39*4;i++){
        printf("%d ",((unsigned char *)&bb)[i]);
    }
}


 


打印结果:

在C语言中,将结构体(struct)中数组的数据赋值给非结构体(即普通数组)的过程需要一些步骤。首先,你需要了解结构体数组的基本概念。 结构体是一种自定义的数据类型,它可以包含多个不同类型的成员(通常是变量)。数组是一种数据结构,它存储一相同类型的数据项。 假设你有一个结构体类型 `struct_type`,它有一个数组 `array`,并且你想将这个数组的数据赋值给一个普通的数组 `normal_array`。 下面是如何操作的步骤: 1. **定义结构体数组**:首先,你需要定义结构体类型和相应的数组。 ```c typedef struct { int id; char name[50]; int age; int numbers[5]; } struct_type; struct_type array[10]; // 结构体数组 ``` 2. **初始化结构体数组**:你可以使用一个循环来初始化结构体数组。注意,对于包含数组结构体,需要按照数组的大小逐个初始化元素。 ```c for (int i = 0; i < 10; i++) { array[i].id = i + 1; // 为每个元素设置id strcpy(array[i].name, "Name" + i); // 为每个元素设置name array[i].age = 25 + i; // 为每个元素设置age for (int j = 0; j < 5; j++) { array[i].numbers[j] = i * j + j + 1; // 为每个元素的numbers数组设置数据 } } ``` 3. **将结构体数组的值复制到普通数组**:接下来,你可以使用逐元素的复制方式将结构体数组的值复制到普通数组中。但是请注意,普通数组的元素大小可能不同,因此需要使用循环和类型转换来确保正确复制数据。 ```c int normal_array[10]; // 普通数组 for (int i = 0; i < 10; i++) { for (int j = 0; j < sizeof(struct_type) / sizeof(int); j++) { // 注意这里将struct_type转换为int类型来计算元素的数量 normal_array[i] = array[i].array[j]; // 将结构体中的数据复制到普通数组中 } } ``` 现在,`normal_array` 数组中的每个元素应该 `array` 结构体数组中的对应元素具有相同的数据值。请注意,这种方法假设普通数组的大小足以容纳结构体中的所有数据。如果普通数组的大小不足以容纳所有数据,那么可能会出现溢出或数据丢失的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值