我在公共类里面定义了3个数组变量:namespace GlobalVariable
{
public class Global
{
public static int FrameCount;
public static double[] NmlzdSignal = new double[4096];
public static double[] real = new double[4096];
public static double[] imag = new double[4096];
}
}然后在一个函数里用指针访问这三个数组:unsafe private void GetNyquistPlot()
{ double *inpPtr=Global.NmlzdSignal; double *realPtr=Global.real; double *imagPtr=Global.imag;
Hilbert(inpPtr,realPtr,imagPtr);}报错...赋不了值,,,Cannot implicitly convert type 'double[]' to 'double*',三个赋值语句都不对.关键问题是:请问怎样把数组的第一个值赋给指针呢?API接口:void Hilbert(double *input, double *real, double *imag),改不了的.请讲得详细一些,小弟是新手万分感谢!!
{
public class Global
{
public static int FrameCount;
public static double[] NmlzdSignal = new double[4096];
public static double[] real = new double[4096];
public static double[] imag = new double[4096];
}
}然后在一个函数里用指针访问这三个数组:unsafe private void GetNyquistPlot()
{ double *inpPtr=Global.NmlzdSignal; double *realPtr=Global.real; double *imagPtr=Global.imag;
Hilbert(inpPtr,realPtr,imagPtr);}报错...赋不了值,,,Cannot implicitly convert type 'double[]' to 'double*',三个赋值语句都不对.关键问题是:请问怎样把数组的第一个值赋给指针呢?API接口:void Hilbert(double *input, double *real, double *imag),改不了的.请讲得详细一些,小弟是新手万分感谢!!
不能隐式转换
你显式转换一下看可以不
double *inpPtr=(double*)Global.NmlzdSignal;double *realPtr=(double*)Global.real;double *imagPtr=(double*)Global.imag;
将函数GetNyquistPlot()改成:
unsafe private void GetNyquistPlot()
{
fixed(double* inpPtr=Global.NmlzdSignal,realPtr=Global.real,imagPtr=Global.imag)
{
Hilbert(inpPtr,realPtr,imagPtr);//statement
}
}
fixed 语句设置指向托管变量的指针并在 statement 执行期间“锁定”该变量。如果没有 fixed 语句,则指向托管变量的指针将作用很小,因为垃圾回收可能不可预知地重定位变量。(实际上,除非在 fixed 语句中,否则 C# 不允许设置指向托管变量的指针。)