c++ - एम्पर्सेंड(&) साइन सी++ में कैसे काम करता है?




pointers reference (2)

संभावित डुप्लिकेट:
C ++ में पॉइंटर चर और संदर्भ चर के बीच अंतर क्या हैं?

यह मुझे भ्रमित कर रहा है:

class CDummy 
{
public:
   int isitme (CDummy& param);
};

int CDummy::isitme (CDummy& param)
{
  if (&param == this)
  { 
       return true; //ampersand sign on left side??
  }
  else 
  {    
       return false;
  }
}

int main () 
{
  CDummy a;
  CDummy* b = &a;

  if ( b->isitme(a) )
  {
    cout << "yes, &a is b";
  }

  return 0;
}

सी में और आमतौर पर एक var का पता मतलब है। इसका मतलब क्या है? क्या यह पॉइंटर नोटेशन का एक शानदार तरीका है?

मुझे लगता है कि यह एक सूचक संकेत है क्योंकि यह सब के बाद एक सूचक है और हम दो पॉइंटर्स की समानता की जांच कर रहे हैं।

मैं cplusplus.com से पढ़ रहा हूं और उनके पास यह उदाहरण है।


और इसका एक और अर्थ है:

1) एक चर का पता ले लो

int x;
void* p = &x;
//p will now point to x, as &x is the address of x

2) एक समारोह के संदर्भ में एक तर्क पारित करें

void foo(CDummy& x);
//you pass x by reference
//if you modify x inside the function, the change will be applied to the original variable
//a copy is not created for x, the original one is used
//this is preffered for passing large objects
//to prevent changes, pass by const reference:
void fooconst(const CDummy& x);

3) एक संदर्भ चर घोषित करें

int k = 0;
int& r = k;
//r is a reference to k
r = 3;
assert( k == 3 );

4) bitwise और ऑपरेटर

int a = 3 & 1; // a = 1

एन) अन्य ???


वैसे CDummy& param जिसे फ़ंक्शन CDummy::isitme पैरामीटर के रूप में घोषित किया गया है CDummy::isitme वास्तव में एक reference जो एक सूचक की तरह "अलग" है, लेकिन अलग है। संदर्भों के बारे में ध्यान देने योग्य महत्वपूर्ण बात यह है कि उन कार्यों के अंदर जहां उन्हें पैरामीटर के रूप में पारित किया जाता है, आप वास्तव में इस प्रकार के उदाहरण का संदर्भ रखते हैं, न कि सिर्फ "पॉइंटर"। तो, टिप्पणी के साथ लाइन पर, '&' सी की तरह काम कर रहा है, इसे पारित तर्क का पता मिल रहा है, और इसे तुलना करने के लिए, जो कि कक्षा के उदाहरण के लिए एक सूचक है विधि को बुलाया जा रहा है।





ampersand