3

私はdelphiXE2に取り組んでおり、PIntegerに取り組んでいました。私のデルファイコードでこれを行った場合

var
  P: PInteger;
  testInt: Integer;
  Scores: array[0..4] of Integer=(33,44,56,78,78);
begin
  P := @Scores;
  testInt := (P+1)^;
  WriteLn(testInt);
  ReadLn;
end;

このエラーが発生しました。

[DCC Error] Project1.dpr(23): E2015 Operator not applicable to this operand type

PS:testInt := (P+1)^;23行目です

ただし、これを試すと

var
  PCh: PChar;
  testchar: char;
  str: array[0..4] of char=('a','b','c','d','e');
begin
  PCh := @str;
  testchar := (PCh+1)^;
  WriteLn(testchar);
  ReadLn;
end;

それはうまくいきます!コンソールは 'b' を出力できます!

これがどのように発生し、いつ ((Pointer)(P)+1)^ が機能するかについては明確ではありませんか?

4

3 に答える 3

0
var
  P: PInteger;
  testInt: Integer;
  Scores: array [0..4] of Integer = (33, 44, 56, 78, 78);
begin
  P := @Scores[0];
  testInt := PInteger(UINT(P) + SizeOf(Integer))^;
  WriteLn(testInt);
  ReadLn;
end;

@Scores[0]配列の最初の要素を取得するために使用する必要があります。SizeOf(Integer)配列内の次の整数を取得するには、の代わりに追加する必要があります1

于 2013-10-22T06:30:12.343 に答える