将C语言的代码转换为C#的代码,C中的指针在C#中应该是用数组吧?
那位大神看看下面的转换
void __ogg_fdrffti(int n, double *wsave, int *ifac){  if (n == 1) return;
  drfti1(n, wsave+n, ifac);
}/*c代码*/
        void __ogg_fdrffti(int n,  double[] wsave, int[] ifac)
        {
            if (n == 1) return;
            drfti1(n,wsave+n,ifac);
        }/*转换后的C#代码*/
但是在wsave+n下提示有错误为“运算符“+”无法应用于double[]和int类型的操作数”
求错误的的解决方法,不胜感激

解决方案 »

  1.   

    C# CODE:
     void __ogg_fdrffti(int n, double[] wsave, int[] ifac)
      {
      if (n == 1) return;
      drfti1(n,wsave[n],ifac);
      }给分
      

  2.   

    wsave+n,这样c#不支持,c#只能通过下标访问,wsave[n]
      

  3.   

    这就是数组首地址+偏移量
    在C#里面就是array[offse]呗。。如上#4所述
      

  4.   


    打开“unsafe”编译开关,就支持了。
      

  5.   

    关键是看你的drfti1是如何改写的。
      

  6.   

            static void drfti1(int n,double[] wa,double[] ifac){            
                 int[] ntryh ={ 4,2,3,5 };
                 double tpi = 6.28318530717958647692528676655900577;
                 double arg,argh,argld,fi;
                 int ntry=0,i,j=-1;
                  int k1, l1, l2, ib;
                 int ld, ii, ip;
                 int ls, nq, nr;
                 int ido, ipm, nfm1;
                 int nl=n;
                 int nf=0;             int temp;
                L101:
                 j++;
                 if (j < 4)
                   ntry=ntryh[j];
                 else
                   ntry+=2;            L104:
                 nq=nl/ntry;
                 nr=nl-ntry*nq;
                 if (nr!=0) goto L101;             nf++;
                 ifac[nf+1]=ntry;
                 nl=nq;
                 if(ntry!=2)goto L107;
                 if(nf==1)goto L107;             for (i=1;i<nf;i++){
                  ib=nf-i+1;
                 ifac[ib+1]=ifac[ib];
                 }
                 ifac[2] = 2;             L107:
                 if(nl!=1)goto L104;
                 ifac[0]=n;
                 ifac[1]=nf;
                 argh=tpi/n;
                  ls=0;
                 nfm1=nf-1;
                 l1=1;             if(nfm1==0)return;             for (k1=0;k1<nfm1;k1++){
                   ip=(int)ifac[k1+2];
                    ld=0;
                   l2=l1*ip;
                   ido=n/l2;
                   ipm=ip-1;               for (j=0;j<ipm;j++){
                     ld+=l1;
                     i=ls;
                     temp = i + n;
                     argld=(double)ld*argh;
                     fi=0;
                     for (ii=2;ii<ido;ii+=2){
                 fi+=1;
                 arg=fi*argld;
                 wa[temp++]=Math.Cos(arg);
                 wa[temp++]=Math.Sin(arg);
                     }
                     ls+=ido;
                    }
                   l1=l2;
                  }
        }
    这是经过修改的C#写的drftil
      

  7.   

    既然你的drfti1是改写得来的,那么顺便把参数列表也改写下,增加1个参数,用来传递那个wsave+n的n值,内部处理就是数组的偏移量了。