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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Видео драйвер с++ http://www.cyberforum.ru/cpp-beginners/thread542485.html
Здравствуйте. Не сможете ли вы заполнить этот пустой код. Сам ума не приложу как это сделать. Мы как бы пишем сами ОС, и вот, это типа драйвер. #define VIDEO_WIDTH 80 //ширина экрана #define VIDEO_HEIGHT 25 //высота экрана #define VIDEO_RAM 0xb8000 //адрес видеопамяти int tty_cursor; //положение курсора int tty_attribute; //текущий аттрибут символа
C++ map <string[],double> Возникла необходимость в конструкции вида: =>значение выбрал map <string,double> но как определять элементы никак не разберусь например map <string,double> a; string str1.str2; string mas={str1,str2}; a=120; http://www.cyberforum.ru/cpp-beginners/thread542480.html
C++ NULL указатель
Идея состоит в том чтобы создать класс Стек на основе односвязного списка. Строка с 0xc0000005 № 36. Не могу найти в чем проблема, может кто поопытней подскажет. #include <iostream> #include <malloc.h> #include <windows.h> using namespace std; template <class T> class Stack {
C++ Конструкторы и деструкторы
#include <iostream> #include <Windows.h> class Try { public: void* px; Try() { printf("Try\n"); px=malloc(12); }; Try operator+(int b) {
C++ Функция round(), округление числа до 4-х знаков после запятой http://www.cyberforum.ru/cpp-beginners/thread542466.html
Вот наткнулся на проблемку как округлить число до 4 знаков после запятой? Подскажите что делать?
C++ Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a, выполнить требуемую проверку. Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a типа unsigned. Выполнить необходимые проверки для данного числа: Проверить, установлен ли 11 или 15 бит в “1”. Включить 1, 3, 5, 6, 8, 10, 11, 12 и 13 биты, не изменяя остальных, записав результат в переменную b. Помогите пожалуйста разобраться с этими масками. подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2012, 18:00     Не происходит обмена значениями. В чем проблема?
Вы сами себя запутали с этими указателями. Давайте посмотрим, как всё это будет располагаться в памяти:
Пусть переменные 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;
}
 
Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru