代码之家  ›  专栏  ›  技术社区  ›  NumberFour

是双*和双**空降类型吗?C#

  •  3
  • NumberFour  · 技术社区  · 15 年前

    我知道double是一个BLITTABLE类型,所以C++中的double和C是double的两倍。

    我有以下非托管函数: int get_值(双**参数,int sz)

    其中param是指向double数组的指针,sz是它的大小。

    如何将此函数导入C#?

    提前谢谢

    3 回复  |  直到 15 年前
        1
  •  2
  •   Hans Passant    15 年前

    int get_values(double* array, int size);
    

    其中size表示客户端分配的数组的大小,函数的返回值表示实际复制到数组中的double数。等效的P/Invoke声明为:

    [DllImport("blah.dll")]
    private static extern int get_values(double[] array, int size);
    

    在调用函数之前,必须使用new将数组分配到承诺的大小。

    但双重**论点是一个障碍。这可能意味着函数返回一个指向double数组的指针,但是size参数没有什么意义。因为它是拥有数组并控制其大小的函数。或者,这可能意味着客户端传递一个二维数组,但是只有一个size参数是没有意义的。

    请用函数功能的正确解释更新您的问题。

        2
  •  0
  •   Robert Harvey    15 年前

    This article

    下面的复杂类型也适用

    一维飞航导弹阵列 类型,例如整数数组。 可blittable类型的变量数组为 它本身不可空袭。

        3
  •  0
  •   Roger Pate Roger Pate    15 年前

    在函数参数类型的上下文中, double* double[] 它们是相同的:

    void f(double* p);
    void g(double p[]);
    void h(double p[10]); // even if you supply a size! (it's ignored)
    
    void i(double (&a)[10]); // now this is different
    

    在其他情况下,它们不是:

    void j() {
      double a[10]; // sizeof a == sizeof(double) * 10
      double* p; // sizeof p == sizeof(void*)
    }
    

    double** vs double*[] ,但请注意 double[][] (不带大小)是不同的,带大小意味着指向数组的指针(必须指定除一个维度以外的所有维度)。

    听起来好像你在用 双重的** 双重的* 为你工作?

    int get_values(double* array, int size);
    
    void func() {
      double a[10];
      get_values(a, 10);
    }