C ++ Call By Address a Call By Reference

C Call Address



C ++ je flexibilní univerzální programovací jazyk. Původně byl vytvořen Bjarne Stroustrup, dánský počítačový vědec v roce 1985. C ++ podporuje metody předávání tří parametrů, tj. volání podle hodnoty, volání podle adresy a volání podle odkazu. V tomto článku budeme diskutovat o mechanismu volání podle adresy a volání podle odkazu.

Co je funkce?

Než přejdeme k aktuálnímu tématu, musíme pochopit, jaká je funkce v C ++. Mnoho z vás už možná funkce zná.







Funkce je v podstatě kus kódu, který lze použít k provedení určitého úkolu. Funkce se používá hlavně ke snížení opakovaného kódu v programu C ++. Bere vstup jako parametry a vrací výstup jako návratovou hodnotu. Pokud funkci definujeme jednou, můžeme ji v pozdější části našeho programu vyvolat/použít vícekrát. Tímto způsobem ušetříme v programu spoustu opakujících se kódů.



Každý program C ++ musí mít funkci main (). Funkce main () je vstupním bodem pro program C ++. Kromě funkce main () může programátor definovat libovolný počet funkcí.



Zde je syntaxe definování funkce:





Return_type název_funkce(Seznam vstupních parametrů)

Funkce v C ++ může přijmout 0 nebo více vstupních parametrů, zatímco může vrátit pouze jednu návratovou hodnotu.

Co je adresa?

V jazyce C ++ existují dva typy proměnných (podobné jazyku C) - proměnná dat a proměnná adresy. Proměnná adresy slouží k uložení adresy jiné datové proměnné. Uvažujme například o následujícím fragmentu kódu:



int= 100;
int *ptr= &;

Zde nám první příkaz říká, že proměnná i je datová proměnná a ukládá hodnotu 100. Ve druhém příkazu deklarujeme proměnnou ukazatele, tj. Ptr, a inicializujeme ji adresou proměnné i.

Co je to Reference?

Odkaz je další silnou funkcí jazyka C ++. Zvažme následující fragment kódu:

intna= 200;
int &r=na;

V tomto případě jsme deklarovali celé číslo, tj. A, a pak jsme deklarovali referenční proměnnou r, která je inicializována hodnotou a. Referenční proměnná tedy není nic jiného než alias jiné proměnné.

Metody předávání parametrů:

V jazyce C ++ existují tři typy metod předávání parametrů:

  1. Call by value / Pass by value
  2. Volejte podle adresy / Procházejte podle adresy
  3. Call by reference / Pass by reference

V tomto článku diskutujeme o - Call by address a Call by reference.

Co je Call By Address / Pass by address?

V případě metody Call by address / Pass by address jsou argumenty funkce předávány jako adresa. Funkce volajícího předá adresu parametrů. Proměnné ukazatele se používají v definici funkce. Pomocí metody Call by address může funkce přistupovat ke skutečným parametrům a upravovat je. V další části tohoto článku uvidíme příklad metody Call by address.

Co je Call By Reference / Pass by reference?

V metodě Call by reference / Pass by reference jsou parametry funkce předávány jako reference. Uvnitř definice funkce jsou skutečné parametry přístupné pomocí referenční proměnné.

Příklady:

Nyní, protože chápeme koncept metod předávání parametrů, uvidíme několik ukázkových programů, které porozumí mechanismu předávání parametrů v C ++:

  1. Příklad-1-volání podle adresy (1)
  2. Příklad-2-volání podle adresy (2)
  3. Příklad-3-Call by Reference (1)
  4. Příklad-4-Call by Reference (2)

První dva příklady jsou vysvětleny, jak metoda Call by address funguje v C ++. Poslední dva příklady mají vysvětlit koncept Call by reference.

Příklad-1-volání podle adresy (1)

V tomto příkladu předvedeme mechanismus volání podle adresy. Z funkce main () voláme funkci hello () a předáváme adresu var. V definici funkce přijímáme adresu var v proměnné ukazatele, tj. P. Uvnitř funkce ahoj se hodnota var mění pomocí ukazatele na 200. Po volání funkce hello () se proto hodnota var mění uvnitř funkce main () na 200.

#zahrnout
použitím jmenný prostorhodiny;

prázdnéAhoj(int *p)
{
náklady <<endl<< 'Funkce Inside hello ():' <<endl;
náklady << 'Hodnota *p =' << *p<<endl;
*p= 200;
náklady << 'Hodnota *p =' << *p<<endl;
náklady << 'Ukončení funkce hello ().' <<endl;
}

inthlavní()
{
intkde= 100;
náklady << 'Hodnota var uvnitř funkce main () =' <<kde<<endl;

Ahoj(&kde);

náklady <<endl<< 'Hodnota var uvnitř funkce main () =' <<kde<<endl;

vrátit se 0;
}

Příklad-2-volání podle adresy (2)

Toto je další příklad metody volání podle adresy. V tomto příkladu vysvětlíme, jak lze metodu volání podle adresy použít k vyřešení problému v reálném životě. Například chceme napsat funkci pro výměnu dvou proměnných. Pokud k záměně dvou proměnných použijeme mechanismus volání podle hodnoty, skutečné proměnné se ve funkci volajícího nezmění. V takovém případě lze použít metodu volání podle adresy. V tomto případě předáváme adresu funkce var_1 (& var_1) a var_2 (& var_2) funkci mySwap (). Uvnitř funkce mySwap () vyměňujeme hodnoty těchto dvou proměnných pomocí ukazatelů. Jak vidíte na níže uvedeném výstupu, skutečná hodnota těchto proměnných se po provedení funkce mySwap () prohodí ve funkci main ().

#zahrnout
použitím jmenný prostorhodiny;

prázdnémySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

inthlavní()
{
intvar_1= 100;
intvar_2= 300;

náklady << 'Před voláním funkce mySwap () hodnota var_1:' <<var_1<<endl;
náklady << 'Před voláním funkce mySwap () hodnota var_2:' <<var_2<<endl<<endl;

náklady << 'Volání funkce mySwap () - volání podle adresy.' <<endl<<endl;
mySwap(&var_1,&var_2);

náklady << 'Po volání funkce mySwap (), hodnota var_1:' <<var_1<<endl;
náklady << 'Po volání funkce mySwap (), hodnota var_2:' <<var_2<<endl;

vrátit se 0;
}

Příklad-3-Call by Reference (1)

V tomto příkladu ukážeme, jak funguje volání podle odkazu v C ++. V definici funkce hello () je hodnota přijímána jako referenční proměnná (& p). Pomocí referenční proměnné (tj. P) jsme schopni změnit hodnotu skutečného parametru (var) uvnitř funkce main ().

#zahrnout
použitím jmenný prostorhodiny;

prázdnéAhoj(int &p)
{
náklady <<endl<< 'Funkce Inside hello ():' <<endl;
náklady << 'Hodnota p =' <<p<<endl;
p= 200;
náklady << 'Hodnota p =' <<p<<endl;
náklady << 'Ukončení funkce hello ().' <<endl;
}

inthlavní()
{
intkde= 100;
náklady << 'Hodnota var uvnitř funkce main () =' <<kde<<endl;

Ahoj(kde);

náklady <<endl<< 'Hodnota var uvnitř funkce main () =' <<kde<<endl;

vrátit se 0;
}

Příklad-4-Call by Reference (2)

Toto je další příklad volání podle odkazu. V tomto příkladu ukážeme, jak funguje volání podle odkazu v C ++ pomocí příkladu ze skutečného světa. Funkce mySwap () je volána z funkce main () s následujícími parametry - var_1 a var_2. Uvnitř funkce mySwap () přijímáme parametry jako referenční proměnné.

#zahrnout
použitím jmenný prostorhodiny;

prázdnémySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

inthlavní()
{
intvar_1= 100;
intvar_2= 300;

náklady << 'Před voláním funkce mySwap () hodnota var_1:' <<var_1<<endl;
náklady << 'Před voláním funkce mySwap () hodnota var_2:' <<var_2<<endl<<endl;

náklady << 'Volání funkce mySwap () - volání podle odkazu.' <<endl<<endl;
mySwap(var_1, var_2);

náklady << 'Po volání funkce mySwap (), hodnota var_1:' <<var_1<<endl;
náklady << 'Po volání funkce mySwap (), hodnota var_2:' <<var_2<<endl;

vrátit se 0;
}

Závěr

Pochopení metod předávání parametrů v C ++ je velmi zásadní. Programovací jazyk C podporuje pouze volání podle hodnoty a volání podle adresy. Ale C ++ podporuje Call by reference spolu s předchozími dvěma mechanismy. V tomto článku jsme viděli několik pracovních příkladů, abychom porozuměli konceptu Call by address a Call by reference. Volání podle adresy je velmi účinná a oblíbená metoda v aplikacích vestavěných domén.