Другие языки программирования и технологии
Указатели и ссылки в c++
Объясните пожалуйста что значит такая конструкция *&arr в c++
Это передача указателя в функцию по ссылке в тех случаях, когда он является выходным параметром. Например:
#include <iostream>
using namespace std;
void find_ref(int*& begin, const int* end, int* box, int value) {
cout << "Вызов *& - Успех! >>> ";
do if (*begin == value) break; while (++begin != end);
}
void find_ptr(int* begin, const int* end, int* box, int value) {
cout << "Вызов * - Неудача! >>> ";
do if (*begin == value) break; while (++begin != end);
}
void show(const int* begin, const int* end) {
do cout << *begin << ' '; while (++begin != end);
cout.put('\n');
}
int main() {
int box[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto value = 5;
auto end = box + size(box);
setlocale(LC_CTYPE, "Russian");
puts("Вывести из массива все элементы начиная со значения 5");
auto begin_ref = box;
find_ref(begin_ref, end, box, value);
show(begin_ref, end);
auto begin_ptr = box;
find_ptr(begin_ptr, end, box, value);
show(begin_ptr, end);
system("pause");
}
#include <iostream>
using namespace std;
void find_ref(int*& begin, const int* end, int* box, int value) {
cout << "Вызов *& - Успех! >>> ";
do if (*begin == value) break; while (++begin != end);
}
void find_ptr(int* begin, const int* end, int* box, int value) {
cout << "Вызов * - Неудача! >>> ";
do if (*begin == value) break; while (++begin != end);
}
void show(const int* begin, const int* end) {
do cout << *begin << ' '; while (++begin != end);
cout.put('\n');
}
int main() {
int box[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto value = 5;
auto end = box + size(box);
setlocale(LC_CTYPE, "Russian");
puts("Вывести из массива все элементы начиная со значения 5");
auto begin_ref = box;
find_ref(begin_ref, end, box, value);
show(begin_ref, end);
auto begin_ptr = box;
find_ptr(begin_ptr, end, box, value);
show(begin_ptr, end);
system("pause");
}
& - берем указатель на переменную arr
* - разыменовываем этот указатель, то есть получаем ссылку на переменную
логически это типа как x + y - y
то есть лишнее действие (получение указателя)
если нужна ссылка допустим в функцию foo, то можно было просто написать так: foo(arr);
* - разыменовываем этот указатель, то есть получаем ссылку на переменную
логически это типа как x + y - y
то есть лишнее действие (получение указателя)
если нужна ссылка допустим в функцию foo, то можно было просто написать так: foo(arr);
& - берем адрес
* - получаем значение в соответствии с типом
* - получаем значение в соответствии с типом
указатель на путь к переменной
Игорь Галюк
путь - нет такого термина... Плюсов не знаешь
Похожие вопросы
- C++ указатель на ссылку, ссылка на указатель что можно создать и пример кода если нетрудно.
- Указатели на строки в C++
- Объясните мне указатели и ссылки в С++. Для чего они нужны?
- Как разыменовать указатель в C++
- Зачем в С/C++ создан отдельный тип "указатель"
- Когда стоит использовать указатели c++
- Зачем нужны указатели в c++? начал изучать язык C++ и не очень понимаю зачем нужны указатели?
- Зачем вообще указатели в C++?
- Массив указателей в C++
- C++. Указатели. Связный список. Как добавить элемент в конец списка? Вопрос для разбирающихся