Зачем использовать указатели для обмена номерами (новичок)? - PullRequest
0 голосов
/ 31 января 2019

У меня есть некоторые проблемы, заставляющие меня думать об указателях.Я знаю, что они делают в теории, но у меня проблемы с пониманием того, на что они действительно способны.Основные упражнения, которые я видел, на мой взгляд немного расплывчаты, потому что они могут быть выполнены без реального предмета.Например, поменять местами два числа, либо по ссылке, либо по адресу.

#include <iostream>
using namespace std;

int main()
{
int a = 45, b = 35;
cout << "Before Swap\n";
cout << "a = " << a << " b = " << b << "\n";

int z = a;
a = b;
b = z;

cout << "After Swap with pass by reference\n";
cout << "a = " << a << " b = " << b << "\n";
} 
//copied an example i saw online with pointers and modified it to get the 
same result without needing them

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Используйте метод std::swap() для подкачки.Это более эффективно.

Для вашего понимания, если мы напишем функцию, которая меняет два значения, поэтому мы должны передавать значения по ссылке, а не по значению.

То же самое в случаес указателями. Некоторое время нам нужно поменять значение указателями.

Так что, если мы передадим значения этой функции из основного, она поменяется.

void swap(int&,int&); 

Но здесь это не сработает, если мы передадим значения этой функции из основного.

void swap(int,int);
0 голосов
/ 31 января 2019

Один из примеров использования указателей может быть лучше (если предположить, что это своего рода школьный контекст), если вы хотите создать функцию для обмена числами вместо того, чтобы много переписывать код.

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
    return
}

Если бы вы попытались использовать целые числа в функции вместо указателей, это поменял бы значения локально, а не поменял местами переменные в более широком контексте.То, что вы могли бы сделать для достижения тех же результатов, - это использовать ссылки (т.е. int &a, int &b), поэтому вам не нужно действительно использовать указатели, и в этом примере они не особенно полезны.

Прагматически, std::swap() гораздо более полезен в современном c ++, но в приведенном выше примере может быть, почему онлайн-учебник использует указатели.

Указатели могут быть полезны в других контекстах, но я неНе знаю, входит ли это в сферу вашего вопроса, возможно, что учебник пытался достичь с помощью указателей.

...