references c
Запознайте се с начините за деклариране и използване на референции в C ++.
Позоваването е основна концепция в програмния език C ++. Въпреки че не е толкова силен, колкото указателите, въпреки това ни позволява да го използваме за писане на ефективни програми. Основното използване на референтната променлива е при предаване на параметри на функции.
Популярната техника за предаване на параметри „предаване чрез препратка“ използва препратки. В този урок ще видим какво е референция и как да я декларираме и използваме. Също така ще обсъдим разликите между указателите и препратките, както и предаването и връщането на препратка към / от функции.
=> Вижте тук, за да разгледате пълния списък с уроци за C ++.
Какво ще научите:
- Какво е референция?
- Деклариране на референтни променливи
- Референтен Vs указатели
- Предаване на препратки към функции
- Връщащи се справки
- Заключение
- Препоръчително четене
Какво е референция?
Препратката е псевдоним или друго име на променлива. Като се има предвид променлива с идентификатор, можем да предоставим друг идентификатор на тази променлива, така че да можем да се позовем на тази променлива или с първоначалното й име, или с друго име. Това „друго име“ е това, което се нарича Референтен.
Помислете, че имаме променлива ‘i’ със стойност 17. Ако j е препратка, тогава представянето на паметта на променлива i и препратка j е показано по-долу.
Както е показано на горната фигура, променлива и това е псевдоним, т.е.референтна точка към същата стойност.
Деклариране на референтни променливи
Референцията може да бъде декларирана с помощта на оператора ‘&’.
Декларацията за справка е показана по-долу.
int a = 10; int& refvar = a;
В горния код декларирахме целочислена променлива със стойност 10. След това декларираме друга променлива refvar и й присвояваме променлива. Имайте предвид, че докато декларирахме refvar, използвахме & оператор точно преди името на променливата. Това показва, че refvar е препратка към вече съществуваща променлива.
Можем да се позовем на променливата „a“, като използваме името на променливата a или използваме референтното име „refvar“.
изпълнение на алгоритъма на краткия път на dijkstra в java
По-долу е даден прост пример за препратки:
#include #include using namespace std; int main() { int age = 22; int& numYears = age; double salary = 10000.00; double& wages = salary; cout<<'Age: '< Изход:
Възраст: 22
Брой години: 22
Заплата: 10000
Заплати: 10000
В горния код имаме цяло число променлива възраст. След това декларираме референтна цяло число променлива numYears към възрастовата променлива. Имаме друга променлива заплата от тип double. След това декларираме двойна референтна променлива заплата към променливата заплата.
След това отпечатваме променливите, първо възрастта, след което препратката му е последвана от заплата и препратка. Ако проверим резултата от програмата, разбираме, че променливата и препратката към нея сочат към една и съща стойност и следователно Възраст и бройГоди, както и заплата и заплати, имат същите стойности.
Референтен Vs указатели
В сравнение с указателите, препратките са по-безопасни и по-лесни за използване.
Ще обсъдим няколко разлики между указателите и препратките:
- За разлика от указателите, препратките не могат да имат нулева стойност. Задължително е препратките да имат присвоена стойност.
- Референциите се инициализират в момента, в който са създадени. За разлика от това, указателите могат да бъдат инициализирани по всяко време и не е задължително по време на декларацията.
- Указателите могат да бъдат пренасочени към стойностите спокойно. Но с препратки не можем да направим това. След като се присвои стойност на променливата, т.е.когато се създаде псевдоним на променлива, не можем да присвоим друга променлива на тази препратка.
- Нямаме невалидни препратки. По дефиниция препратката е псевдоним на променливата и тя се инициализира по време на самото създаване. По този начин няма шанс да имаме невалидна препратка и по-късно да й присвоим променлива с конкретен тип данни. За разлика от това можем да имаме кухи указатели.
Поради тези ограничения, обсъдени по-горе, препратките в C ++ не могат да се използват със структури от данни като свързан списък. Моля, обърнете внимание, че в Java нямаме всички тези ограничения или ограничения върху препратките.
Предаване на препратки към функции
В предишните ни уроци за функции вече обсъдихме техниката на параметрите „предаване чрез препратка“ и видяхме пример за размяна на две числа, използвайки тази техника. Пропускаме обяснението на тази техника в този раздел и представяме функцията за суап още веднъж като пример.
Но този път вместо да разменяме числа, ще разменяме два низа.
#include #include using namespace std; void swap(char * &str1, char * &str2) { char *temp = str1; str1 = str2; str2 = temp; } int main() { char *str1 = 'references'; char *str2 = 'pointers'; cout<<'str1 = '< Изход:
str1 = препратки str2 = указатели
След размяна ...
str1 = указатели str2 = препратки
Така че в тази програма ние предаваме низове (char *) на функцията за суап. Формалните параметри са две препратки към променлива от тип char *. Отбелязваме, че когато две стойности се разменят, тяхната модификация се отразява в извикващата функция, тъй като използваме препратки / псевдоними за параметри.
Връщащи се справки
Подобно на връщането на указатели от функции, ние също можем да връщаме препратки от функции. Връщащите препратки от функция също връщат неявен указател към връщаната стойност. Поради тази причина вляво на заданието може да се използва функция, връщаща препратка.
Нека дадем пример за връщане на препратка от функция.
#include using namespace std; int myarray[] = {1, 0, 2, 3, 5}; int& setValues( int i ) //returns reference to the array { return myarray[i]; } int main () { cout << 'myarray before change' << endl; for ( int i = 0; i < 5; i++ ) { cout << 'myarray[' << i << '] = '; cout << myarray[i] << endl; } setValues(1) = 1; setValues(3) = 8; cout << 'Value after change' << endl; for (int i = 0; i < 5; i++ ) { cout<< 'myarray[' << i << '] = '; cout << myarray[i] << endl; } return 0; }
Изход:
myarray преди промяна
myarray [0] = 1
myarray [1] = 0
myarray [2] = 2
myarray [3] = 3
myarray [4] = 5
Стойност след промяна
myarray [0] = 1
myarray [1] = 1
myarray [2] = 2
myarray [3] = 8
myarray [4] = 5
Снимката на екрана за същото е показана по-долу:
Както се вижда в горния код, ние дефинираме функцията setValues, която връща препратка и параметър, който е цяло число. Вътре във функцията просто връщаме препратката към масива към позицията I в C ++.
В основната функция отпечатваме стойностите на масива. След това с помощта на функцията setValues променяме стойностите на два елемента в масива. Отново отпечатваме стойността на масива.
как да отворите dat файл в windows
Едно нещо, което трябва да отбележим с препратки, е, че можем да имаме функция да връща препратка само когато данните са или статични, или глобални. Неправомерно е връщането на препратка към локална променлива в C ++.
Заключение
Читателите трябва да отбележат, че основното използване на препратки е за предаване на параметри на функции.
В предстоящите уроци ще разгледаме ламбда функции / изрази в C ++, преди да преминем към обектно-ориентирано програмиране в C ++.
=> Вижте най-добрите уроци за обучение на C ++ тук.
Препоръчително четене
- Най-добрият БЕЗПЛАТЕН урок за C #: Най-доброто ръководство за C # за начинаещи
- Указатели и операции на показалеца в C ++
- Тестване на натоварване с уроци за HP LoadRunner
- Променливи в C ++
- Обектно-ориентирано програмиране в C ++
- Урок за тръби на Unix: Тръби в програмирането на Unix
- Библиотечни функции в C ++
- 70+ НАЙ-ДОБРИ уроци за C ++, за да научите БЕЗПЛАТНО програмиране на C ++