在C语言中,如果我们有:
typedef int a[100];
typedef int b[200];
然后类型a和b是等价的? 据我所知,C使用名称等价, 但我很困惑。
答案 0 :(得分:9)
在您的示例中,a
是int[100]
类型的别名,b
是类型int[200]
的别名。这两种类型不等同,因为数组的大小是其类型的一部分,不同的大小意味着不同的类型。
如果第二行是typedef int b[100];
,则a
和b
是等效的。
据我所知,C使用名称等价
结构和联合在名义上是键入的,如果你有两个标记为A和B的结构(或联合)类型,它们具有完全相同的主体,它们仍然被认为是不同的类型。因此,如果变量的类型为struct A
,则无法先为其转换struct B
而不先将其转换。
对于仅仅是别名的typedef
,情况并非如此。因此,如果您有两个typedef typedef X a; typedef X b;
,那么X
,a
和b
都无法区分。