C语言typedef定义数组类型别名后声明变量的类型判定问题
问题解答
结论非常明确:lottery和user都是长度为5的int类型数组,和直接写int lottery[5], user[5];的声明效果完全等价。
核心逻辑说明
typedef的作用是给完整的类型定义别名,这里LotteryNumbers对应的完整类型就是「长度为LOTTERY_SIZE的int数组」,不存在缺省的修饰部分。- 这种写法刚好可以规避普通数组/指针声明的歧义:如果直接写
int lottery[5], user;,只有lottery是数组,user是普通int变量;但用了typedef定义的数组类型声明变量时,所有跟着的变量都会完整套用别名对应的类型,不会出现修饰符只作用于第一个变量的问题。
你可以用下面的代码验证结论:
#include <stdio.h> const int LOTTERY_SIZE = 5; typedef int LotteryNumbers[LOTTERY_SIZE]; int main(){ LotteryNumbers lottery, user; // 32位int占4字节,长度为5的int数组总大小为20字节 printf("lottery字节数:%zu\nuser字节数:%zu", sizeof(lottery), sizeof(user)); return 0; }
运行后两个变量的sizeof输出一致,即可确认二者都是长度为5的int数组。
内容的提问来源于stack exchange,提问作者muhammad muzaib
相关产品推荐
相关产品推荐

