時には、C api関数がパラメータのデータ型としてポインタを想定していることが あります。おそらくパラメータと同一の場所に書き込むためか、もしくは そのデータが大きすぎて値渡しできない場合です。これはパラメータの参照渡しとしても 知られています。
ctypes
はbyref関数をエクスポートしており、パラメータを参照渡しするために
使用します。pointer
関数を使っても同じ効果が得られます。
しかし、pointer
は本当のポインタオブジェクトを構築するためより多くの処理を行うことから、
Python側でポインタオブジェクト自体を必要としないならばbyrefを使う方がより高速です:
>>> i = c_int() >>> f = c_float() >>> s = create_string_buffer('\000' * 32) >>> print i.value, f.value, repr(s.value) 0 0.0 '' >>> libc.sscanf("1 3.14 Hello", "%d %f %s", ... byref(i), byref(f), s) 3 >>> print i.value, f.value, repr(s.value) 1 3.1400001049 'Hello' >>>
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。