go访问c数组.md

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章