猿问

go中的int和C.int有什么区别?

import "C"


func f() {

  var vGo int

  var vC  C.int

  // fails to compile with error

  // cannot use &vGo (type *int) as type *C.int in argument to...

  C.c_function(&vGo)  

  // compiles just fine:

  C.c_function(&vC)

}

我用 CGO_ENABLED=1 GOARCH=arm 编译...


在这种情况下 int 和 C.int 类型有什么不同?

在哪里可以找到有关 GO 中 C 类型的其他信息?


呼啦一阵风
浏览 377回答 2
2回答

RISEBY

类型之间有什么区别?这取决于。如果您使用的是 64 位,则 Go int 将是 64 位,而 C int 将是 32。如果您使用的是 32 位,则没有真正的区别。在哪里可以找到有关 Go 中 C 类型的其他信息?查看 C 的文档。如评论中所述,Go 中不允许隐式数字类型转换,因此需要进行转换。

天涯尽头无女友

Go 故意不支持隐式类型转换,但有一些例外1:在以下任一情况下,值 x 可分配给 T 类型的变量(“x 可分配给 T”):x 的类型与 T 相同。x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中至少有一个不是命名类型。T 是一个接口类型,x 实现了 T。x 是双向通道值,T 是通道类型,x 的类型 V 和 T 具有相同的元素类型,并且 V 或 T 中至少有一个不是命名类型。x 是预先声明的标识符 nil 并且 T 是指针、函数、切片、映射、通道或接口类型。x 是一个无类型常量,可以用 T 类型的值表示。您的情况需要进行转换以匹配可能不同的内存布局2。
随时随地看视频慕课网APP

相关分类

Go
我要回答