指针 – Swift中String的UnsafeMutablePointer
发布时间:2020-12-14 04:42:05 所属栏目:百科 来源:网络整理
导读:我正在使用Accelerate框架中LAPACK实现的dgeev算法来计算矩阵的特征向量和特征值.遗憾的是,Apple文档中没有描述LAPACK功能,仅包含指向 http://netlib.org/lapack/faq.html的链接. 如果你查一下,你会发现dgeev中的前两个参数是表示是否计算特征向量的字符.在S
我正在使用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($0),UnsafeMutablePointer($0),&N,...) } 在块内,$0是指向NUL终止的char数组的指针 备注:dgeev_()不修改前两个参数指向的字符串, int dgeev_(const char *__jobvl,const char *__jobvr,...); 这将被映射到Swift as func dgeev_(__jobvl: UnsafePointer<Int8>,__jobvr: UnsafePointer<Int8>,...) -> Int32; 在这种情况下,你可以简单地称之为 let result = dgeev_("N","N",...) 因为Swift字符串会自动转换为UnsafePointer< Int8>) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |