指针 – Swift中String的UnsafeMutablePointer

指针 – Swift中String的UnsafeMutablePointer,第1张

概述我正在使用Accelerate框架中LAPACK实现的dgeev算法来计算矩阵的特征向量和特征值.遗憾的是,Apple文档中没有描述LAPACK功能,仅包含指向 http://netlib.org/lapack/faq.html的链接. 如果你查一下,你会发现dgeev中的前两个参数是表示是否计算特征向量的字符.在Swift中,它要求UnsafeMutablePointer< Int8>.当我只使 我正在使用Accelerate框架中LAPACK实现的dgeev算法来计算矩阵的特征向量和特征值.遗憾的是,Apple文档中没有描述LAPACK功能,仅包含指向 http://netlib.org/lapack/faq.html的链接.

如果你查一下,你会发现dgeev中的前两个参数是表示是否计算特征向量的字符.在Swift中,它要求UnsafeMutablePointer< Int8>.当我只使用“N”时,我收到一个错误. dgeev函数和错误在以下屏幕截图中描述

我该怎么做才能解决这个问题?

解决方法 “问题”是前两个参数被声明为char *
而不是const char *,即使字符串没有被函数修改:

int dgeev_(char *__jobvl,char *__jobvr,...);

映射到Swift as

func dgeev_(__jobvl: UnsafeMutablePointer<Int8>,__jobvr: UnsafeMutablePointer<Int8>,...) -> Int32;

一个可能的解决方法是

let result = "N".withCString {     dgeev_(UnsafeMutablePointer(
int dgeev_(const char *__jobvl,const char *__jobvr,...);
),UnsafeMutablePointer(
func dgeev_(__jobvl: UnsafePointer<Int8>,__jobvr: UnsafePointer<Int8>,...) -> Int32;
),&N,...)}

在块内,$0是指向Nul终止的char数组的指针
UTF-8表示字符串.

备注:dgeev_()不修改前两个参数指向的字符串,
所以它“应该”被宣布为

let result = dgeev_("N","N",...)

这将被映射到Swift as

在这种情况下,你可以简单地称之为

因为Swift字符串会自动转换为UnsafePointer< Int8>)
如String value to UnsafePointer<UInt8> function parameter behavior所述.

总结

以上是内存溢出为你收集整理的指针 – Swift中String的UnsafeMutablePointer全部内容,希望文章能够帮你解决指针 – Swift中String的UnsafeMutablePointer所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1007184.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存