作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在C语言中,如果我们有:
typedef int a[100];
typedef int b[200];
那么类型a和b是等价的吗?据我所知,C 使用名称等价,但我很困惑。
最佳答案
在您的示例中,a
是类型 int[100]
的别名,b
是类型 int[ 200]
。这两种类型并不等同,因为数组的大小是其类型的一部分,不同的大小意味着不同的类型。
如果第二行是 typedef int b[100];
,则 a
和 b
是等价的。
As far as i know C uses name equivalence
结构和 union 在名义上是类型化的,如果你有两个标记为 A 和 B 的结构(或 union )类型,它们具有完全相同的主体,它们仍然被认为是不同的类型。因此,如果变量的类型为 struct A
,则必须先转换它才能将其分配给 struct B
。
typedef
不是这样,它们只是别名。所以如果你有两个 typedefs typedef X a; typedef X b;
,那么X
,a
和b
都没有区别。
关于c 类型等价的编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44311545/
我是一名优秀的程序员,十分优秀!