- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
values = ffi.new( "int[]", 10 )
pValue = ffi.addressof( pInt, 0 )
使用 Python CFFI,上面的代码创建了一个指向 values
的第一个元素的指针作为 pValue
。
然后您可以使用 values[0]
访问它的内容,但这并不是真正透明的,有时不方便跟踪什么索引是什么值。
是否有诸如 C *-operator
之类的函数或其他东西来取消引用 pValue
并直接访问其内容?
在其他语言中...:
// In C:
// =====
int values[ 10 ] = {0};
int* pValue = &( values[ 0 ] );
func_with_pointer_to_int_as_param( pValue );
printf( "%d\n", *pValue );
-------------------------------------------------------------
# In Python with CFFI:
# ====================
values = ffi.new( "int[]", 10 )
pValue = ffi.addressof( values, 0 )
lib.func_with_pointer_to_int_as_param( pValue ) #lib is where the C functions are
print values[ 0 ] #Something else than that? Sort of "ffi.contentof( pValue )"?
编辑:
这是一个有用的用例:
我发现这样做更具可读性:
pC_int = ffi.new( "int[]", 2 )
pType = ffi.addressof( pC_int, 0 )
pValue = ffi.addressof( pC_int, 1 )
...
# That you access with:
print "Type: {0}, value: {1}".format( pC_int[ 0 ], pC_int[ 1 ] )
而不是:
pInt_type = ffi.new( "int[]", 1 )
pType = ffi.addressof( pInt_type, 0 )
pInt_value = ffi.new( "int[]", 1 )
pValue = ffi.addressof( pInt_value, 0 )
...
# That you access with:
print "Type: {0}, value: {1}".format( pInt_type[ 0 ], pInt_value[ 0 ] )
而且我猜前者更快。但是,当你想访问这些值时,它会让人不方便记住,比如“ok type is number 0”等等......
最佳答案
在 C 中,语法 *pType
始终等同于 pType[0]
。所以说你想做这样的事情:
print "Type: {0}, value: {1}".format( *pType, *pValue )
但这当然不是有效的 Python 语法。解决方案是您始终可以像这样重写它,这将成为有效的 Python 语法:
print "Type: {0}, value: {1}".format( pType[0], pValue[0] )
关于python - 在 Python CFFI 中取消引用使用 ffi.addressof 创建的指针(C * - 等效运算符?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38464789/
我需要以一种或另一种方式将 groupID(和另一个整数)链接到我动态添加的按钮。有什么想法吗? 我可以做什么; AddHandler mybutton.Click, AddressOf PrintM
关于我的other question 如何获取 CFuncType 对象的地址(实际函数指针)? addressof() 没有报告正确的地址。 C 代码: extern "C" _declspec(d
我有一个算法,可以将指针转换为类 std::vector input; std::vector ptrs; std::vector output; 所以为了获得ptrs我做 transform(i
所以几天前我了解了 std::addressof。在 http://en.cppreference.com/w/cpp/memory/addressof给出了一个可能的实现: template T*
出于某些教育原因,我通过将引用运算符 & 重载为已删除的成员函数或作为 private 方法,设法阻止其他人获取我的类对象的地址.但是 C++11 提供了一个新的模板化函数 std::addresso
我需要在我正在开发的类中使用多个 Windows API 函数,用于一个业余爱好项目。其中几个函数需要使用 AddressOf 运算符,但根据Microsoft Documentation ,禁止在类
我想运行一个简单的代码段,但每次 Access 和 Excel 都会崩溃。 我正在运行 CallbackTest2,你能帮帮我吗?谢谢分配。 Declare Function CallWindowPr
这个问题已经有答案了: What type of address returned on applying ampersand to a variable or a data type in C/C+
如果我没有编译代码,我会说 1 和 2 给出相同的结果,因为它们都有一个 int指针p指向变量age。在 1 和 2 中取消引用 age 应该会得到相同的结果。我还知道 3 只会给我变量 age 的第
我怎样才能使下面的代码工作? for (auto f=face.begin(); f!=face.end(); ++f) { if (std::addressof(*f) == 0x18b91
我可能在这里遗漏了一些东西。我需要存储新分配的内存块的指针地址。 我这样做: void* buffer = _aligned_malloc(4096,4); assert(buffer
这个问题在这里已经有了答案: Is pointer arithmetic on inactive member of a union UB? (2 个答案) 关闭 4 年前。 下面的代码尝试在 C+
任何人都可以帮我解决 C# 中关于 VB6 中的 AddressOf 运算符 的替代解决方案吗? AddressOf 返回一个长值。我可以通过什么方式获取 C# 中的输出? 最佳答案 扩展 Harpe
我需要写一个 constexpr addressof 函数,但我觉得不可能。有谁知道这是否可能? cppreference.com 中的引用实现: template T* addressof(T& a
Clang 和 GCC(MSVC 除外)在模板参数传递时无法解析 std::addressof作为模板函数的参数。以下是此类错误的示例: std::vector v{1,2,3,4,5}; std::
sizeof(long) 返回 8 个字节,但 &along(long 的地址)是 12 个十六进制数字(48 位)或 6 个字节。在使用 clang 编译的 OS X 64 位上。这里有差异还是这是
代码: public Thread ThreadReceive; ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessag
在获取对象的地址时,如何确定是否需要 addressof(x) 而不是 &x? 似乎这个问题令人困惑,所以需要澄清一下: addressof 显然绕过了重载的地址操作符。 我已经知道了。 我想知道的是
我在将我的 VB6 项目转换为 VB.NET 时遇到了一些问题 我不明白这个“AddressOf”函数在 VB.NET 中应该如何 我的 VB6 代码: Declare Function MP4_Cl
我正在使用std::cout进行日志记录,并且当“请勿使用'cout'的地址,而是从lambda调用它的地址“时,sonarqube报告错误。 std::ostream *streamp; strea
我是一名优秀的程序员,十分优秀!