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

Что обозначает данный код? - C++

Восстановить пароль Регистрация
 
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
07.06.2011, 17:38     Что обозначает данный код? #1
Подскажите, пожалуйста, как пояснить строки 4 и 5 в коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream.h>
char& last (char* s)
{
while (*++s);
return*(--s);
}
void main()
{
char s[]="12345";
last(s)='9';
cout<<s<<"\n";
system("pause");
}
и вот это (это вроде бы меняются местами две переменные, но что обозначает треугольный значок, если можно поясните):
a^=b^=a^=b;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.06.2011, 17:43     Что обозначает данный код? #2
Цитата Сообщение от aquarius-a Посмотреть сообщение
while (*++s);
return*(--s);
Пока указатель не указывает на конец строки сдвигаем его, и возвращаем его декрементированное значение. Фактически получаем последний символ. Только тут не учли, что длина строки может быть равна нулю...
a^=b^=a^=b
Расшифровывается так
a=a^b;
b=a^b;
a=a^b;
^ - это побитовое исключающее или.
MaXiDRoM_90
10 / 10 / 1
Регистрация: 21.03.2010
Сообщений: 47
07.06.2011, 18:22     Что обозначает данный код? #3
Чуть понятнее:
^ - это операция XOR=побитовому сложению величин.
Если a представляется в битовом виде 0110,b как 1010,то результатом ^ будет 1100
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
08.06.2011, 22:47  [ТС]     Что обозначает данный код? #4
всем большое спасибо!
x-positive
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 21
09.06.2011, 02:10     Что обозначает данный код? #5
Цитата Сообщение от aquarius-a Посмотреть сообщение
C++
1
2
3
char& last
(*++s);
*(--s);
Я хочу задать такой вопрос: Почему мы используем в первой строке & мы же вроде изменим адрес а не значение?
И почему в строке (*++s); мы ставим * в скобках, а уже в следующей строке за скобками?
Ну тут я ещё могу понять, приоритеты, порядок исполнения.
Но вот ещё: почему когда я пытаюсь вместо конструкции
C++
1
while (*(s++) == *(s1+)) {...}
использовать
C++
1
while(*(s) == *(s1)) {*(s++); *(s1++);...}
или
C++
1
while(*(s) == *(s1)) {(s++); (s1++);...}
то она становится не работоспособной и цикл зацикливается.
Кто может мне объяснить разницу, чтобы я смог правильно пользоваться указателями.

Буду очень благодарен.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.06.2011, 05:02     Что обозначает данный код? #6
Цитата Сообщение от x-positive
Почему мы используем в первой строке &
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
char &f(char s[])
{
    return *(s + 3);
}
 
int main()
{
    char s[] = "1234";
    cout << s << endl;
    f(s) = 'x';
    cout << s << endl;
    return 0;
}
Код
[guest@localhost tests]$ ./t
1234
123x
[guest@localhost tests]$
это к адресу не имеет отношения, & - это ссылка

Цитата Сообщение от x-positive
И почему в строке (*++s); мы ставим * в скобках, а уже в следующей строке за скобками?
эти скобки относятся к while, он всегда со скобками
твой вопрос: чем *++s отличается от *(--s)
ответ: вообще ничем *(--s) можно записать как *--s
сначала делается шаг назад, потом берётся значение
возвращается не копия значения, а ссылка на конкретный объект, в котором хранится значение

Цитата Сообщение от x-positive
C++
1
*(s)
зачем писать скобки, если это то же самое, что и *s

Цитата Сообщение от x-positive
Но вот ещё: почему когда я пытаюсь вместо конструкции
C++
1
    while (*(s++) == *(s1++))
C++
1
    while (*s++ == *s1++)
аналог

как ты думаешь, при каком условии заканчивается этот цикл ?
Yandex
Объявления
09.06.2011, 05:02     Что обозначает данный код?
Ответ Создать тему
Опции темы

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