C#使用指针相关

由于C#没有指针,所以通过给函数传入指针来【操作】一个变量,尤其是字符串和数组时会非常麻烦。

像这样的操作在C#里面就不太方便实现:

int Compare(int a, int b, int *sum) //输出两个数里更大的那个数和两数之和
{
    *sum=a+b;              //*sum表示指针sum存储地址里的值,直接改变地址存储的信息 
    if (a>b) return a;
    else return b;
}

int main()
{
    int a,b,s;
    input(a,b);
    cout<<Compare(a,b,&s); //&的意思是取该变量的存储地址
    cout<<s;
    return 0;
}

尤其是用C或C++写的DLL,里面有很多传入指针的函数,C#调用这些DLL就很麻烦。

首先C#里面使用指针相关,需要unsafe代码块。比如:

[DllImport("D:/学习/C++串口/CppSerialPort2/CppSerialPort2/Debug/CppSerialPort2")]
unsafe static extern void JustATest(int* a,int* b);

注意这里是DLLImport的一个特殊格式,在其他地方用这个unsafe,应该是一个块,比如:

int x;
unsafe
{
    Command(&x);
}

这里是传入单个变量的地址,实现函数对变量的操作。如果要传入数组,则更麻烦,需要使用fixed语句,这是让一个变量始终指向一个内存地址,而且它必须在unsafe代码块里面用。

int[] a = new int[50];
int[] b = new int[50];
unsafe
{
    fixed (int* aa = a) 
    fixed (int* bb = b) 
    JustATest(aa, bb);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值