为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
呼啦一阵风 2022-01-04 10:02:02
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 类型的其他信息?
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

类型之间有什么区别?这取决于。如果您使用的是 64 位,则 Go int 将是 64 位,而 C int 将是 32。如果您使用的是 32 位,则没有真正的区别。

在哪里可以找到有关 Go 中 C 类型的其他信息?查看 C 的文档。如评论中所述,Go 中不允许隐式数字类型转换,因此需要进行转换。


查看完整回答
反对 回复 2022-01-04
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

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


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 375 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信