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

Тайные знаки и путанница ссылок с указателями - C++

Восстановить пароль Регистрация
 
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 13:54     Тайные знаки и путанница ссылок с указателями #1
Всего два вопроса.

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
#include <iostream>
using namespace std;
 
void fn(int& b)
{
     int c = 0;
     do
     {
          cout << "Введите число:";
          cin >> c;
          
          if (c>0) {b+=c;}
          if (c<0) {c=-c;  b-=c;}
          
          cout << "b=" << b << endl;
          
     }while(c!=0);
};
         
int main()
{
    setlocale(0,"");
    int bal = 0;
    fn(bal);
    
    system("pause");
    return 0;
}
Почему строка
C++
1
if (c<0) {c=-c;  b-=c;}
работает, как надо, а вот эта строка
C++
1
if (c<0) {b-=c;} // Тоже самое, только без c=-c
работает не так, как надо.

И второй вопрос. Как можно было бы сделать ту же самую программу, используя в функции fn не (int& b), а (int* b) ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 13:54     Тайные знаки и путанница ссылок с указателями
Посмотрите здесь:

Операция с указателями C++
работа с указателями C++
C++ Заменить в файле все знаки "+" на знаки "-", а знаки "-" на знаки "+"
C++ Путанница
C++ работа с указателями
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
01.08.2015, 14:00     Тайные знаки и путанница ссылок с указателями #2
Nawar,
1) b - -c == b + c, т.е если с - отрицательное число, то при вычитании его из положительногоb, оно к b прибавится, а если b - отрицательное, то из с вычтется b. Хотя вопрос ещё и в том, как оно себя ведет и как нужно чтобы себя вело.
2) везде, где нужно использовать значение b(арифметические операции, присвоение нового значения, вывод значения в на консоль), перед этой самой b нужно поставить звездочку
MansMI
1046 / 843 / 205
Регистрация: 08.01.2012
Сообщений: 3,020
01.08.2015, 14:01     Тайные знаки и путанница ссылок с указателями #3
if (c<0) b+=c;
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2015, 14:01     Тайные знаки и путанница ссылок с указателями #4
Цитата Сообщение от Nawar Посмотреть сообщение
работает не так, как надо.
Работает так, как написано. Лучше скажи, чего ты ожидаешь, т.к. "работает не так" слишком размытое понятие.
Цитата Сообщение от Nawar Посмотреть сообщение
используя в функции fn не (int& b), а (int* b) ?
Везде, где раньше в теле функции было b следует писать *b. Вся разница.
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 14:13  [ТС]     Тайные знаки и путанница ссылок с указателями #5
Со вторым вопросом всё понятно. Но с первым, чёрт...
Если разложить математически.
c=-c. Значит, если c = -c, то первая строка и будет давать плюс. Ведь, если c = -c, а b-=с (т.е. b = b - - c, что == b =b+c). Из этого следует, что именно строка {c=-c; b-=c;} не будет давать желаемого результата, а строка {b-=c, т.е. b=b-c} должна этот результат давать. Но всё происходит наоборот. Я явно чего то не понимаю. Объясните, пожалуйста)
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
01.08.2015, 14:18     Тайные знаки и путанница ссылок с указателями #6
Начните перечитывать алгебру 6 класс.
3 + (-2) == 3 - 2
b += c всегда даст ВЕРНЫЙ результат не в зависимости какой знак у c

следовательно проверок c>0 c< 0 c==0 ненадо делать.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2015, 14:18     Тайные знаки и путанница ссылок с указателями #7
Цитата Сообщение от Nawar Посмотреть сообщение
Я явно чего то не понимаю.
Распиши на конкретных числах и всё поймешь.
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 14:29  [ТС]     Тайные знаки и путанница ссылок с указателями #8
Точно, так и есть. Чёрт, какой же я тупой.
Спасибо, господа)
Tulosba
01.08.2015, 14:32
  #9

Не по теме:

Цитата Сообщение от Nawar Посмотреть сообщение
Спасибо, господа)
Заходи, если что

Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 15:00  [ТС]     Тайные знаки и путанница ссылок с указателями #10
В общем.

Добавил я оператор вывода.

C++
1
if (c<0) { c=-c; cout << c << endl; b-=c;}
Здесь "c" положительное число. Если из c=-c убрать минус, "c" будет отрицательным. Что это за накладка минуса на минус?

Исходя из этого, строка if(c<0) {b+=c} намного проще и ничем, кроме длинны от {c=-c;b-=c;} не отличается. Но как он минус на минус накладывает?

Добавлено через 5 минут
Всё ясно, вопрос отпадает.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2015, 15:03     Тайные знаки и путанница ссылок с указателями #11
Цитата Сообщение от Nawar Посмотреть сообщение
Если из c=-c убрать минус, "c" будет отрицательным.
Ты, похоже, вообще не понимаешь что значит запись:
C++
1
c=-c;
А значит она то, что у значения меняется знак на противоположный: было отрицательным - стало положительным. Понятно, что если ты уберешь минус, то число как было отрицательным, так им и останется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2015, 15:06     Тайные знаки и путанница ссылок с указателями
Еще ссылки по теме:

C++ Прикол с указателями
работа с указателями C++
C++ работа с указателями

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

Или воспользуйтесь поиском по форуму:
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 15:06  [ТС]     Тайные знаки и путанница ссылок с указателями #12
Спасибо, что отвечаете даже на идиотские вопросы. Теперь, всё ясно на 100%.
Yandex
Объявления
01.08.2015, 15:06     Тайные знаки и путанница ссылок с указателями
Ответ Создать тему
Опции темы

Текущее время: 23:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru