指针类型不兼容??奇怪的
Posted
技术标签:
【中文标题】指针类型不兼容??奇怪的【英文标题】:Incompatible pointer type?? Strange 【发布时间】:2011-08-16 16:18:41 【问题描述】:我需要得到方程组的解。为此,我使用了函数 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);
【问题讨论】:
sgesv_() 是你写的吗?您也可以发布代码吗? +1 因为有足够的动力去理解警告并修复它们! 【参考方案1】:第三个参数是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);
【讨论】:
以上是关于指针类型不兼容??奇怪的的主要内容,如果未能解决你的问题,请参考以下文章
使用类型表达式初始化 'void(^)(struct ALAssetsGroup *, BOOL *)' 的不兼容块指针类型
从“NSEntityDescription *”分配给“NSManagedObject Subclass*”的不兼容指针类型