你应该再仔细阅读整个段落。
所有支持的 C 类型在 Kotlin 中都有对应的表示:
在 C 中也有左值和右值(在 C++ 中,等价于左值Type &和Type右值)。主要区别是左值可以设置为某个值,而右值在初始化后不能更改。因此,对于 C 中的每种类型,左值和右值都需要它自己的 Kotlin 类型。
在主题
所有支持的 C 类型在 Kotlin 中都有对应的表示:
只考虑右值。但是对于左值,您唯一需要添加的是Var类型的结尾。唯一的例外是
对于结构(以及结构的类型定义),此表示是主要表示,并且与结构本身具有相同的名称
现在让我们回到枚举。常规的 Kotlin 枚举映射到常规的 C 枚举。所以实际上FIRST并且SECOND有MyEnum两种语言的类型。但是如果你想创建一个包含MyEnum例如的变量怎么办:
// This is C Code
MyEnum a = FIRST;
a在 C 中具有类型MyEnum,但它是左值(在 C++ 中是MyEnum &),因此在 Kotlina中将具有类型MyEnumVar,因为这正是文档中所说的:${type}Var, where ${type} = MyEnum.
到下一个问题:
CPointer 的类型参数 T 必须是“左值”类型之一
所以struct S*它应该是CPointer<SVar>,但请记住structs 是例外,我们不应该添加Var,所以这只是CPointer<S>。
int8_t*是CPointer<int_8tVar>——这里也不例外。
char*是CPointer<ByteVar>- 再次没有例外(只有左值类型,结构除外)。
char**是CPointer<CPointerVar<ByteVar>>因为我们需要左值CPointer<ByteVar>,这正是CPointerVar<ByteVar>.
最后:
IntVar, LongVar,CPointerVar<T>和其他东西是类型int, long,的左值CPointer。如果您想更改函数中的对象,则可能需要这样做。类似Ref<${type}>Java的东西。