You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中实现数据类型数组?循环获取类型大小方法咨询

循环获取多数据类型sizeof值的解决方案

你的原代码存在语法错误:#define t_array = [ int, float ];不符合C语言规范,C不支持这种方式定义类型集合,且t_array[0]无法被识别为合法类型名。以下是两种可行的实现方案:

方案1:预处理器宏列表遍历

利用预处理器宏批量处理目标类型,实现类似循环的效果,代码简洁且无需手动维护数组:

#include <stdio.h>

// 打印类型大小的宏,新增类型名称输出更清晰
#define t_size(type) printf("sizeof(%s) = %zu\n", #type, sizeof(type))

// 定义需要检测的所有类型,新增类型直接添加X(类型)即可
#define TYPE_LIST \
    X(int)        \
    X(float)      \
    X(double)     \
    X(char)       \
    X(long long)

int main() {
    // 展开TYPE_LIST,对每个类型调用t_size
    #define X(type) t_size(type);
    TYPE_LIST
    #undef X
    return 0;
}

方案2:结构体成员索引实现

如果你偏好通过结构体索引的方式,可定义包含目标类型成员的结构体,结合成员信息数组实现循环遍历:

#include <stdio.h>
#include <stddef.h>

#define t_size(val) printf("sizeof(%s) = %zu\n", #val, sizeof(val))

// 结构体成员对应各目标类型
struct TypeSet {
    int t_int;
    float t_float;
    double t_double;
    char t_char;
};

// 存储成员名称与大小的结构体
typedef struct {
    const char* type_name;
    size_t type_size;
} TypeInfo;

int main() {
    struct TypeSet ts;
    TypeInfo type_list[] = {
        {"int", sizeof(ts.t_int)},
        {"float", sizeof(ts.t_float)},
        {"double", sizeof(ts.t_double)},
        {"char", sizeof(ts.t_char)}
    };

    // for循环遍历输出
    int count = sizeof(type_list) / sizeof(type_list[0]);
    for (int i = 0; i < count; i++) {
        printf("sizeof(%s) = %zu\n", type_list[i].type_name, type_list[i].type_size);
    }

    // 也可直接通过结构体成员调用t_size
    t_size(ts.t_int);
    t_size(ts.t_float);
    return 0;
}

内容的提问来源于stack exchange,提问作者Nulltiton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:52:19