gpt4 book ai didi

转到转换为 *ptrdiff_t 的类型?

转载 作者:IT王子 更新时间:2023-10-29 02:06:10 27 4
gpt4 key购买 nike

在我调用 C 函数的 Go 程序中,我可以从 int 成功转换至 ptrdiff_t . (有点令人担忧的是,即使 Go 类型对于任何现代架构来说都太小了,int8 也能成功编译。)然而 *int*ptrdiff_t产生编译器错误:cannot convert <varname> (type *int) to type *_Ctype_ptrdiff_t .唯一允许成功编译的类型是 int64 .我意识到我可以将我的变量声明为 (*)C.ptrdiff_t 但我想了解相应的 Go 类型以及 Go 编译器在这种情况下的意外行为?

最佳答案

ptrdiff_t 是特定大小的整数类型。当您将另一个整数类型转换为 ptrdiff_t 时,编译器会重新调整整数的大小。换句话说,它改变了旧整数的内存表示以匹配新类型。然后将这个新表示放在内存中的不同位置。

指针是内存中的一个位置。因此,您只能转换为指向相同内存布局的类型。 int64 与 ptrdiff_t 的大小相同,因此内存表示相同,指针可以自由转换。

如果你想转换一个任意的整数类型,你需要首先改变它在内存中的表示,并通过将它分配给一个变量并获取它的指针来给它一个新的位置。

newtype := ptrdiff_t(oldInt)
pnewtype := &newtype

关于转到转换为 *ptrdiff_t 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com