ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 3 · 2లో పాఠం 2కోర్సులో 8/18~12 min
మాడ్యూల్ పాఠాలు (2/2)

విలువ మరియు సూచన ద్వారా పాస్ చేయండి

C++లో, మీరు ఒక ఫంక్షన్‌కి ఆర్గ్యుమెంట్‌ని పంపినప్పుడు, దీన్ని చేయడానికి రెండు ప్రధాన మార్గాలు ఉన్నాయి: విలువ ద్వారా లేదా సూచన ద్వారా.

ఈ వ్యత్యాసాన్ని అర్థం చేసుకోవడం ప్రోగ్రామ్ ఖచ్చితత్వం మరియు పనితీరు ఆప్టిమైజేషన్ రెండింటికీ కీలకం.

విలువ ద్వారా పాస్ (కాపీ)

డిఫాల్ట్‌గా, C++ విలువ ద్వారా ఆర్గ్యుమెంట్‌లను పాస్ చేస్తుంది. దీని అర్థం మెమరీలో డేటా యొక్క కాపీ సృష్టించబడింది. ఫంక్షన్ లోపల చేసిన ఏదైనా సవరణ బయట ఉన్న అసలు వేరియబుల్‌ను ప్రభావితం చేయదు:

C++
#include <iostream>

void increment(int n) {
    n++; // Modifies only the local copy
}

int main() {
    int x = 5;
    increment(x);
    std::cout << x << std::endl; // Prints 5, x remains unchanged!
    return 0;
}

సూచన ద్వారా పాస్ (&)

మీరు ఫంక్షన్ అసలైన వేరియబుల్‌ను సవరించగలగాలని కోరుకుంటే లేదా మీరు పెద్ద వస్తువులను (పొడవైన స్ట్రింగ్‌లు లేదా వెక్టర్‌లు వంటివి) కాపీ చేయడాన్ని నివారించాలనుకుంటే, మీరు తప్పనిసరిగా పాస్ బై రిఫరెన్స్ని ఉపయోగించాలి.

పరామితి రకం తర్వాత & చిహ్నాన్ని జోడించడం ద్వారా సూచన ప్రకటించబడుతుంది:

C++
#include <iostream>

void incrementRef(int& n) {
    n++; // Modifies the original variable directly
}

int main() {
    int x = 5;
    incrementRef(x);
    std::cout << x << std::endl; // Prints 6!
    return 0;
}

int& n పరామితి ఒక కాపీ కాదు, కానీ ఫంక్షన్‌కి కాల్ చేస్తున్నప్పుడు x వేరియబుల్‌కి అలియాస్ (ప్రత్యక్ష సూచన).

మీరే ప్రయత్నించండి

వ్యాయామం#cpp.m3.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

పూర్ణాంకం n (int&n ఉపయోగించి)కి సూచనను తీసుకొని దాని విలువను (n = n * 2) రెట్టింపు చేసే శూన్యమైన రిటర్న్ రకంతో doubleNumber అనే ఫంక్షన్‌ని నిర్వచించండి. 10కి ప్రారంభించబడిన వేరియబుల్ వాల్‌ను మెయిన్ పాస్‌లో కాల్ చేసి, ఆపై వాల్‌ని ప్రింట్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ఫంక్షన్ సిగ్నేచర్ సూచనను సూచించడానికి రకం తర్వాత `&`అక్షరాన్ని ఉపయోగిస్తుంది:`శూన్యం డబుల్ నంబర్(int&n)`.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#cpp.m3.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

a మరియు b (int& a, int& b) అనే రెండు పూర్ణాంకాల సూచనలను తీసుకుని, తాత్కాలిక వేరియబుల్ టెంప్‌ని ఉపయోగించి వాటి విలువలను మార్చుకునే swap అనే ఫంక్షన్‌ను నిర్వచించండి. x మరియు y లను స్వాప్ చేయడానికి ప్రధానంగా కాల్ చేసి, ఆపై వాటిని ప్రింట్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`int temp = aని ఉపయోగించండి; a = b; b = temp;` విలువలను మార్చుకోవడానికి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది