不兼容的指针类型?奇怪的

发布于 2024-11-29 14:32:14 字数 617 浏览 3 评论 0原文

我需要得到方程组的解。为此,我使用函数 sgesv_()。

一切都很好,它给我返回了正确的解决方案结果。

但我收到一个奇怪的警告。

警告:从不兼容的指针类型传递“sgesv_”的参数 3

我正在使用该函数,因为 Apple 在 WWDC 视频上使用它。

我做错了什么?

a1,a2,b1,b2,c1,c2 是浮点数

        __CLPK_integer info;
        __CLPK_integer n=2;
        __CLPK_integer nb=1;
        __CLPK_integer ipiv[n];
        float A[n][n];
        A[0][0]=a1;
        A[0][1]=a2;
        A[1][0]=b1;
        A[1][1]=b2;
        float B[n];
        B[0]=-c1;
        B[1]=-c2;
        sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info);

I need to get the solution of an equation system. For this purpose i use the function sgesv_().

Everything works great, and it retur me the right results of the solution.

But i get an strange Warning.

warning: passing argument 3 of 'sgesv_' from incompatible pointer type

I am using the function as Apple use it on the WWDC video.

What am I doing wrong?

a1,a2,b1,b2,c1,c2 are floats

        __CLPK_integer info;
        __CLPK_integer n=2;
        __CLPK_integer nb=1;
        __CLPK_integer ipiv[n];
        float A[n][n];
        A[0][0]=a1;
        A[0][1]=a2;
        A[1][0]=b1;
        A[1][1]=b2;
        float B[n];
        B[0]=-c1;
        B[1]=-c2;
        sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画中仙 2024-12-06 14:32:14

第三个参数是一个 float * ,但您传递的是一个二维浮点数组。碰巧这些浮点数的顺序是正确的。要消除警告,您可以这样做:

    sgesv_(&n, &nb, &A[0][0], &n, ipiv, B, &n, &info);

或这样:

    sgesv_(&n, &nb, A[0], &n, ipiv, B, &n, &info);

甚至这样:

    sgesv_(&n, &nb, (float *)A, &n, ipiv, B, &n, &info);

或者您可以“展平”您的 A 数组,例如

    float A[n * n];
    A[0 * n + 0] = a1;
    A[0 * n + 1] = a2;
    A[1 * n + 0] = b1;
    A[1 * n + 1] = b2;
    // ...
    sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info);

The third parameter is meant to be a float * but you're passing a 2D array of float. It just so happens that these floats are in the right order. To get rid of the warning you can do this:

    sgesv_(&n, &nb, &A[0][0], &n, ipiv, B, &n, &info);

or this:

    sgesv_(&n, &nb, A[0], &n, ipiv, B, &n, &info);

or even this:

    sgesv_(&n, &nb, (float *)A, &n, ipiv, B, &n, &info);

Or you could just "flatten" your A array, e.g.

    float A[n * n];
    A[0 * n + 0] = a1;
    A[0 * n + 1] = a2;
    A[1 * n + 0] = b1;
    A[1 * n + 1] = b2;
    // ...
    sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文