标题:大佬们,怎么用循环遍历结构体成员呀?成员类型不一致
只看楼主
memcpy
Rank: 2
等 级:论坛游民
帖 子:10
专家分:45
注 册:2020-12-11
结帖率:100%
已结贴  问题点数:20 回复次数:3 
大佬们,怎么用循环遍历结构体成员呀?成员类型不一致
大佬们,怎么用循环遍历结构体成员呀?成员类型不一致
成员太多,用 . 一个一个访问有点麻烦。用指针和循环可以实现吗?
搜索更多相关主题的帖子: 成员 一致 遍历 循环 类型 
2021-01-01 10:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
没办法
2021-01-01 20:42
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
得分:5 
1.麻烦?机器都不喊麻烦(不过机器一喊那就是当了)
2. 可以用其它数据结构啊(难道你想单恋一枝花)

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2021-01-02 11:18
knightfyx
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2018-3-7
得分:5 
理论上只要结构体处于一个连续的内存空间内就可以设置指针通过强制类型转换访问,但是非常地麻烦。建议你还是像楼上回答的使用其他数据结构。我这里给你列举了一个简单的应用示例,如果你能够把相同的变量放在一起就会更简便一些(不需要用switch),毕竟程序很难自动确认你现在所使用的变量类型。
程序代码:
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    struct Mix
    {
        int a;
        char b[20];
        int c;
        float d;
        char e[10];
    };
    Mix*mx1 = (Mix*)malloc(sizeof(Mix));
    (*mx1).a = 2021;
    (*mx1).c = 104;
    (*mx1).d = 22.09;
    strcpy((*mx1).b, "congratul\0");
    strcpy((*mx1).e, "lations\0");
    int loop_a = 0;
    void*_tmp_p1 = (void*)mx1;
    int*_tmp_d = NULL;
    float*_tmp_f = NULL;
    char*_tmp_s = NULL;
    for (; loop_a <= 4; loop_a++)
    {
        switch (loop_a)
        {
        case 0: {
                    _tmp_d = (int*)_tmp_p1;
                    printf("%d %d\n", loop_a, *_tmp_d);
                    _tmp_d++;
                    _tmp_p1 = (void*)_tmp_d;
                }
                continue;
        case 1: {
                    _tmp_s = (char*)_tmp_p1;
                    printf("%d %s\n", loop_a, _tmp_s);
                    _tmp_s+=20;
                    _tmp_p1 = (void*)_tmp_s;
                }
                continue;
        case 2: {
                    _tmp_d = (int*)_tmp_p1;
                    printf("%d %d\n", loop_a, *_tmp_d);
                    _tmp_d++;
                    _tmp_p1 = (void*)_tmp_d;
                }
                continue;
        case 3: {
                    _tmp_f = (float*)_tmp_p1;
                    printf("%d %f\n", loop_a, *_tmp_f);
                    _tmp_f++;
                    _tmp_p1 = (void*)_tmp_f;
                }
                continue;
        case 4: {
                    _tmp_s = (char*)_tmp_p1;
                    printf("%d %s\n", loop_a, _tmp_s);
                }
                continue;
        }
        system("pause");
        return 0;
    }

}

我这里可以正常运行出结果的
2021-01-04 22:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504473-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012570 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved