1
values = ffi.new("int[]", 10)
pValue = ffi.addressof(pInt, 0)
を間接参照、上記のコードはpValue
としてvalues
の最初の要素へのポインタを作成します。は、Python CFFI(C *の演算子は同等?)でffi.addressofで作成されたポインタのPython CFFIで
values[ 0 ]
でコンテンツにアクセスすることはできますが、これは実際には透過的ではなく、どのような値であるのかを把握することは時々不便です。
pValue
を参照して内容に直接アクセスするには、C *-operator
などの機能がありますか?他の言語で
...:
// 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では、 '* x'は' x [0] 'と完全に等価です。 –
はい。私はCDataのポインタの直接間接参照を有することが有用であろうユースケースを追加しました。 – DRz
申し訳ありませんが、私はまだ理解していません。あなたは何をしたいですか?それは '* pType'、' * pValue'のようにCで書いていますか?そして、あなたはそれを書くことができます 'パラメータ・タイプ[0]'、 'p値[0]'。もちろん、独自の関数 'def contentof(p):return p [0]'を定義して使用することもできます。 –