2017-09-29 4 views
0

私はいくつかのC++コードをDelphiに翻訳しようとしています。 Cのコードはとても似varibleに追加したときC++コードをDelphiに翻訳するには

type 
    TSingleArray = array of Single; 
    PSingleArray = ^TSingleArray; 

:私はそれらに対処するには、次のタイプが定義されている

const float* const inp 
const float* const prWeight 

シングルのいくつかのアレイと

C++コードのお得な情報:

inp += 5 

変数が5th occurenのオフセットで更新されると仮定しますCE iは5にインデックスを設定し、これ等5出現のアクセス値ことができる:

i := 5; 
PSingleArray(inp)^[i] := 0.5; 

およびCコード:

for (int j = 5; j; --j) { 
    *inp++ += *prWeight++*ari; 

x := 0; 
for j := 5 downto 0 do 
    begin 
     Inc(i); 
     PSingleArray(inp)^[i] := PSingleArray(inp)^[i] + 
     PSingleArray(prWeight)^[x] * ari; 
    end; 

に変換することができますこれは正しいです?

また、私は不思議です。必要があります。

inp[k++] = nc == 1; 
inp[k++] = nc == 2; 
inp[k++] = nc >= 3; 

BE:

Inc(k); 
PSingleArray(inp)^[k] := Ord(nc = 1); 
Inc(k); 
PSingleArray(inp)^[k] := Ord(nc = 2); 
Inc(k); 
PSingleArray(inp)^[k] := Ord(nc = 3); 

か:

Inc(k); 
PSingleArray(inp)^[k] := Ord(nc = 1); 
PSingleArray(inp)^[k] := Ord(nc = 2); 
PSingleArray(inp)^[k] := Ord(nc = 3); 

私はこれが正しいことだけではよく分かりません。誰かが手掛かりを持っていますか?

+1

このように動的配列(本質的にポインタ)を使用することはできません。可能な方法: 'TSingleArray = array [Word] of single;' C式の** post ** incrementを使うことにも注意してください。 – MBo

+3

初心者の理由が分かりません。これまでどんな質問が良いと考えられていますか? ;) – MBo

+0

@MBoこれは他の誰にとってどのように便利ですか? –

答えて

0

特に、ポインタ/配列の混在演算を使用して、直接変換を試みるべきではありません。

いくつかの注意:

ドロップPSingleArray。 Delphiには、Cが持つポインタと配列の間の暗黙の変換はありません。ポインタ上のすべての算術演算は配列インデックス上で算術演算になる必要があります。ポインタのコピーは配列インデックスのコピーです。インクリメントされたポインタ上の配列インデックスは、複数のインデックス部分の合計になります。

このコードの一部はunidiomatic Cである、あなたが半分開いているCの範囲である、さらにunidiomaticデルファイ

for (int j = 5; j; --j) { 
    *inp++ += *prWeight++*ari; 
} 

// previous incrementing of inp went into i 
for j := 0 to 4 do 
begin 
    inp[i + j] := inp[i + j] + prWeight[j] * ari; 
end; 
i = i + 5; 

注意する必要はありません、終了インデックスは使用されません。

inp[k++] = ...はポストインクリメント演算子を使用します。使用されるインデックスはkの未修正値であるため、inp[k] := ...; Inc(k);になります。 >=の使用にも注意してください。 Boolean => Single1.00.0に変換することはおすすめしませんが、より良いデザインを示すための文脈がありません。

+2

C/C++と同様に、Delphi *には[ポインタ演算](http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Pointer_Math_(Delphi))があります。そうです。したがって、C++の例のように、物理メモリにはDelphiスタイルの動的配列を使用し、ポインターとポインター演算を使用して要素にアクセスすることができます。 –

+0

.. Delphi 2009年以降。 – Victoria

+0

さて、++ n/n ++で入手できます。しかし、私は配列のものについてまだ明確ではない。私はこのようにしなければならない:inpar:TSingleArray; inpar:= inp ^; ? – helgovic

関連する問題