在调用 c 函数的时候,传参为指针类型, 调用后如何拿到指针的值呢?

2018-10-10 00:05:34 +08:00
 ule
c:
void test(int* a, int* b)

python:
a = c_int(0)
b = c_int(0)
test(byref(a), byref(b))

调用后 a,b 都已经被赋值了;

a,b 的类型是 <class 'ctypes.c_long'>

byref 处理后的类型是 <class 'CArgObject'>

如何才能从指针中拿到真正的值呢?
2943 次点击
所在节点    Python
12 条回复
billchenchina
2018-10-10 00:12:11 +08:00
解引用
*a
*b
ule
2018-10-10 00:12:51 +08:00
@billchenchina 不太明白啊..
ule
2018-10-10 00:14:40 +08:00
@billchenchina 我输出了下, 就只是一个类似地址的值 c_long(60654488), 这并不是真正的结果
wwqgtxx
2018-10-10 00:31:49 +08:00
a.value
b.value
wwqgtxx
2018-10-10 00:33:20 +08:00
ule
2018-10-10 00:44:05 +08:00
@wwqgtxx .value 也是数字地址
传进去是一个 int 指针,c 函数对这个指针进行了处理,最终是一个字符串
ule
2018-10-10 00:46:04 +08:00
@wwqgtxx 如果知道怎么把指针地址的值取出来就稳了
reus
2018-10-10 00:53:09 +08:00
只能传指针的指针
就像你想改变变量,就需要传变量的指针,那需要改变指针,就要传指针的指针
xinali
2018-10-10 09:06:22 +08:00
ule
2018-10-10 09:23:57 +08:00
@xinali c 改变了地址, python 不知道咋获取
alixali
2018-10-10 10:29:08 +08:00
这个是不是要*两次才能取到实际的赋值。
ule
2018-10-10 10:42:09 +08:00
已解决,问题在 c 函数的传参上
int* b,是一个指针地址, 不是 int 参数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/496138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX