2

私は Python n00b であり、基本的な質問をするリスクがありますが、ここに行きます。

入りたくないさまざまな理由から、いくつかのコードを C から Python に移植しています。

C コードには、以下に再現するコードがいくつかあります。

float table[3][101][4];
int kx[6] = {0,1,0,2,1,0};
int kz[6] = {0,0,1,0,1,2};

以下の C コードと同等の Python 式が必要です。

float *px, *pz;
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;

Pythonで同等の式を教えてください。

4

2 に答える 2

3

これが問題です... Pythonではポインターを実行できないため、ここに表示しているものは、次の意味で「移植可能」ではありません。

float *px, *pz;    <-- this doesn't exist
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;
^    ^                      ^
|    |                      |
+----+----------------------+---- Therefore none of this makes any sense...

あなたがやろうとしているのは、多次元配列のオフセットへのポインターを持つことtableです.Pythonではそれができないため、このコードをそのまま「移植」したくありません.

これを超えたロジックに従ってください。あなたは and で何をしていますか? これは、試して移植するために理解する必要があるコードです。pxpz

于 2013-07-18T15:43:00.570 に答える
0

Python にはポインターやポインター演算がないため、C コードに直接相当するものはありません。代わりに、ブラケット表記を使用してテーブルにインデックスを付けるようにコードをリファクタリングします。

table[kx[i]][0][lx] = 3

Cとほぼ同等です

px = &(table[kx[i]][0][0])+lx;
*px = 3;

Python では、テーブルが連続していないことに注意してください。特に、これはCで機能するかもしれませんが:

px[10] = 3; // Bounds violation!

これは Python で IndexError になります:

table[kx[i]][0][lx + 10] = 3
于 2013-07-18T15:44:12.770 に答える