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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值