Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Oleg_Brovko
8 / 8 / 1
Регистрация: 07.03.2012
Сообщений: 57
#1

Не происходит обмена значениями. В чем проблема? - C++

08.04.2012, 14:31. Просмотров 365. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
 
using namespace std;
 
void change(int &a, int &b);
 
int main()
{
    int a=1,b=2;
 
    cout<<a<<endl;
    cout<<b<<endl;
 
    change(a,b);
 
    cout<<a<<endl;
    cout<<b<<endl;
 
 
 
 
    return 0;
 
 
 
}
 
void change(int &a, int &b)
{ 
    int* pa=&a;
    int* pb=&b;
    int* pc=NULL;
 
    pc=pa;
    pa=pb;
    pb=pc;
 
    a=*pb;
    b=*pa;
    
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 14:31     Не происходит обмена значениями. В чем проблема?
Посмотрите здесь:

Программа обмена значениями двух переменных a и b - C++
3.8 Составить программу обмена значениями двух переменных a и b. Разработать два варианта решения задачи – с исполь-зованием...

Составить программу обмена значениями трёх переменных - C++
Условия задачи такие: Составить программу обмена значениями трёх переменных величин a,b,c по след схеме: b присвоить значение c, a...

Составить программу обмена значениями трех переменных величины a,b,c строкового типа - C++
Составить программу обмена значениями трех переменных величины a,b,c строкового типа по следующей схеме: b присвоить значение с, а...

ПРоблема со значениями массива - C++
Пишу программу, в ней есть массив, значения которого задаются рандомно от 1 до 9. Когда вызывается функция, определяющая среднее значение,...

Не могу найти ошибку. Нужно написать функцию обмена значениями для 2 целых чисел. Вот мой код - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include&lt;iostream&gt; using namespace std; void F(int a, int b) { a = a + b; b = a -...

в чем проблема? вывод в файл - C++
ну по картинке можно заметить, что при выводе в файл появляются какие-то комбинации букв и цифр, что мне не нравится. как исправить? #...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.04.2012, 18:00     Не происходит обмена значениями. В чем проблема? #2
Вы сами себя запутали с этими указателями. Давайте посмотрим, как всё это будет располагаться в памяти:
Пусть переменные a и b лежат в памяти последовательно, в адресах 0x100 и 0x104 соответственно. Пусть мы ввели 10 и 20. Память будет выглядеть так:
Код
|-----|-----|
|0x000|@@@@@|
|-----|-----|
|~~~~~|~~~~~|
|-----|-----|
|0x100|  10 |
|-----|-----|
|0x104|  20 |
|~~~~~|~~~~~|
При передаче ссылок в функцию передаются фактически указатели, т.е. функция "видит" тот же участок памяти. При инициализации указателей получаем:
Код
      |-----|-----|
pc -> |0x000|@@@@@|
      |-----|-----|
      |~~~~~|~~~~~|
      |-----|-----|
pa -> |0x100|  10 |
      |-----|-----|
pb -> |0x104|  20 |
      |~~~~~|~~~~~|
В результате 34-36 строк получаем:
Код
          |-----|-----|
          |0x000|@@@@@|
          |-----|-----|
          |~~~~~|~~~~~|
          |-----|-----|
pc, pb -> |0x100|  10 |
          |-----|-----|
pa     -> |0x104|  20 |
          |~~~~~|~~~~~|
Т.е. указатели мы и правда обменяли местами. Но теперь pa указывает на ячейку, в которой хранится 20 (значение b), а pb наоборот, на ячейку со значением 10 (значение a). Таким образом, в 38 строке мы в а записываем 10, т.е. то, что там уже и было. То же и в 39 строке с b.
Правильная реализация функции swap такая (и никаких указателей):
C++
1
2
3
4
5
6
7
void int_swap(int& a, int& b)
{
    int temp = a;
    
    a = b;
    b = temp;
}
Oleg_Brovko
8 / 8 / 1
Регистрация: 07.03.2012
Сообщений: 57
10.04.2012, 22:45  [ТС]     Не происходит обмена значениями. В чем проблема? #3
Спасибо большое! А можно ли реализовать как-то через указатели?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.04.2012, 22:47     Не происходит обмена значениями. В чем проблема? #4
Oleg_Brovko,
C++
1
2
3
4
5
6
7
void int_ptr_swap(int *a, int *b)
{
    int temp = *a;
    
    *a = *b;
    *b = temp;
}
Oleg_Brovko
8 / 8 / 1
Регистрация: 07.03.2012
Сообщений: 57
10.04.2012, 22:49  [ТС]     Не происходит обмена значениями. В чем проблема? #5
Если знаешь - все просто. Спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2012, 23:39     Не происходит обмена значениями. В чем проблема?
Еще ссылки по теме:

Перевернуть строку. В чем проблема? - C++
#include &lt;iostream&gt; using namespace std; void swapstr(char* str) { for(int i=0; i&lt;strlen(str)/2-1;i++) { char...

выдает ошибку : cannot find -lbgi...в чем проблема? - C++
#include &lt;stdio.h&gt; int main() { int i,j,n,flag=0,sum1=0,sum2=0,sum3,sum4; printf(&quot;vvedite razmer massiva&quot;); ...

помогите не пойму в чем проблема компилятор не выдает ошибку,но не вычисляет произведение - C++
задача:1) Дан массив A. Вычислить произведение между первым и последним положительными элементами. Программа: #include &lt;iostream.h&gt; ...

Написал программу, но она что-то не совсем то, выдает, не могу понять в чем проблема - C++
При х=3, y= -6 после выполнения фрагмента алгоритма 1. если y&lt;x, то y=y+x 2.если y&lt;0, то y=-y 3. если x&lt;0, то a=x*2 иначе...

Структура Octal. Выдает ошибку E2040 Declaration terminated incorrectly. Не пойму в чем проблема? - C++
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; struct Octal {char*s;int len;} chislo ; {for(int...

Массив: Разместить все элементы с положительными значениями в левой части массива, элементы с отрицательными значениями - в правой - C++
Напишите пожалуйста программу Разместить все элементы с положительными значениями в левой части массива, элементы с отрицательными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
10.04.2012, 23:39     Не происходит обмена значениями. В чем проблема? #6
Для общего развития:
для обмена двух переменных одного типа в с++ есть функция swap, пример:
C++
1
2
3
4
5
int x=3;
int y=103;
swap(x,y);
cout<<x;//103
cout<<y;//3
Yandex
Объявления
10.04.2012, 23:39     Не происходит обмена значениями. В чем проблема?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru