Go没有指针算术,所以它不能访问这样的指针pointer[index]
,因为这意味着*(pointer + index)
。另一个原因是指针不包含索引的限制,如果这样的访问是允许的意味着无约束的内存访问成为可能。
参考来源
例子
/*
#include <stdlib.h>
struct A {
int a;
};
int fun(struct A** a)
{
struct A* _a = (struct A*)malloc(sizeof(struct A) * 2);
_a[0].a = 50;
_a[1].a = 5;
*a = _a;
return 2;
}
*/
import "C"
import "unsafe"
func main() {
var a *C.struct_A
aLen := C.fun(&a)
if a != nil {
p2 := (*[1 << 30]C.struct_A)(unsafe.Pointer(a))
for i := 0; i < int(aLen); i++ {
println(p2[i].a)
}
C.free(unsafe.Pointer(a))
}
}
运行输出
50
5