2 चर (या तो बूलियन, पूर्णांक, int64, TDateTime या स्ट्रिंग) को देखते हुए, मैं हमेशा B को इंगित करने के लिए A कैसे सेट कर सकता हूं?

मान लीजिए कि A और B पूर्णांक हैं, मैंने B को 10 पर सेट किया है।

यहां से मैं चाहता हूं कि ए हमेशा बी को इंगित करे, इसलिए यदि मैं A := 5 करता हूं तो यह इसके बजाय बी को संशोधित करेगा।

मैं इसे रनटाइम पर करने में सक्षम होना चाहता हूं।

-2
hikari 7 अगस्त 2020, 13:39

1 उत्तर

सबसे बढ़िया उत्तर

कई तरीके हैं, और वे सभी स्पष्ट हैं यदि कोई समझता है कि एक चर क्या है: स्मृति के लिए एक सूचक।

पॉइंटर्स का उपयोग करना

var
  iNumber: Integer;   // Our commonly used variables 
  sText: String;
  bFlag: Boolean;

  pNumber: PInteger;  // Only pointers
  pText: PString;
  pFlag: PBoolean;
begin
  pNumber:= @iNumber;  // Set pointers to the same address of the variables
  pText:= @sText;
  pFlag:= @bFlag;

  // Change the memory that both variable and pointer link to. No matter if
  // you access it thru the variable or the pointer it will give you the
  // same content when accessing it thru the opposite way.
  pNumber^:= 1138;     // Same as   iNumber:= 1138;
  sText:= 'Content';   // Same as   pText^:= 'Content';
  pFlag^:= TRUE;       // Same as   bFlag:= TRUE;

वस्तुओं का उपयोग करना

type
  TMyVars= class( TObject )
    iNumber: Integer;
    sText: String;
    bFlag: Boolean;
  end;

var
  oFirst, oSecond: TMyVars;

begin
  oFirst:= TMyVars.Create();   // Instanciate object of class
  oSecond:= oFirst;            // Links to same object

  // An object is already "only" a pointer, hence it doesn't matter through
  // which variable you access a property, as it will give you always the
  // same content/memory.
  oFirst.iNumber:= 1138;       // Same as   oSecond.iNumber:= 1138;
  oSecond.sText:= 'Content';   // Same as   oFirst.sText:= 'Content';
  oFirst.bFlag:= TRUE;         // Same as   oSecond.bFlag:= TRUE;

घोषणाओं का उपयोग करना

var
  iNumber: Integer;
  sText: String;
  bFlag: Boolean;

  iSameNumber: Integer absolute iNumber;
  iOtherText: String absolute sText;
  bSwitch: Boolean absolute bFlag;
begin
  // Pascal's keyword "absolute" makes the variable merely an alias of
  // another variable, so anything you do with one of both also happens
  // with the other side.
  iNumber:= 1138;            // Same as   iSameNumber:= 1138;
  sOtherText:= 'Content';    // Same as   sText:= 'Content';
  bFlag:= TRUE;              // Same as   bSwitch:= TRUE;

आमतौर पर पॉइंटर्स का उपयोग किया जाता है, लेकिन इसके सबसे अधिक नुकसान भी होते हैं (विशेषकर यदि आप अनुशासित प्रोग्रामर नहीं हैं)। चूंकि आप डेल्फी का उपयोग कर रहे हैं, इसलिए मैं उन वस्तुओं पर काम करने के लिए अपनी कक्षाओं का उपयोग करने की सलाह देता हूं।

3
AmigoJack 7 अगस्त 2020, 16:04